在做android项目开发时,大家都知道都会遇到程序报错或者Anr异常,会弹出来一个强制退出的弹出框,对于开发人员是好事,但是对于用户体验 UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。有时候我们会做强制退出摸个程序或者扑捉异常进行处理  这样就类似苹果闪退界面一样 没任何提示  (虽然闪退也是用户不愿意看到的)

直接贴

/**

* 自定义的 异常处理类 , 实现了 UncaughtExceptionHandler接口

*

*/

public class CrashHandler implements UncaughtExceptionHandler {

// 需求是 整个应用程序 只有一个 MyCrash-Handler

private static CrashHandler INSTANCE ;

private Context context;

//1.私有化构造方法

private CrashHandler(){

}

public static synchronized CrashHandler getInstance(){

if (INSTANCE == null)

INSTANCE = new CrashHandler();

return INSTANCE;

}

public void init(Context context){

this.context = context;

}

public void uncaughtException(Thread arg0, Throwable arg1) {

System.out.println("程序挂掉了 ");

// 在此可以把用户手机的一些信息以及异常信息捕获并上传,由于UMeng在这方面有很程序的api接口来调用,故没有考虑

//干掉当前的程序

android.os.Process.killProcess(android.os.Process.myPid());

}

}

代码:

CrashApplication

/**

* 在开发应用时都会和Activity打交道,而Application使用的就相对较少了。

* Application是用来管理应用程序的全局状态的,比如载入资源文件。 初始化第三方工具包

* 在应用程序启动的时候Application会首先创建,然后才会根据情况(Intent)启动相应的Activity或者Service。

* 在本文将在Application中注册未捕获异常处理器。

*/

public class MyApplication extends Application {

@Override

public void onCreate() {

super.onCreate();

CrashHandler handler = CrashHandler.getInstance();

handler.init(getApplicationContext());

Thread.setDefaultUncaughtExceptionHandler(handler);

}

}

在AndroidManifest.xml中注册自定义的MyApplication

在AndroidManifest.xml中注册

package="org.wp.activity" android:versionCode="1" android:versionName="1.0">

android:name=".MyApplication" android:debuggable="true">

重写UncaughtExceptionHandler这个类不仅可以做全局报错处理 我们再强制退出程序功能时候 可以自定义个变量造个空指针 然后程序自然会报错 但是不会出现任何提示消息 这样用户根本无法察觉到 但是程序退出的方法不止这一个。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐