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