在作android项目开发时,你们都知道若是程序出错了,会弹出来一个强制退出的弹 出框,这个自己没什么问题,可是这个UI实在是太丑了,别说用户接受不了,就连 咱们本身自己可能都接受不了。虽然咱们在发布程序时总会通过仔细的测试,可是 不免会碰到预料不到的错误。android
顺手留下GitHub连接,须要获取相关面试等内容的能够本身去找)
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)git
今天就来自定义一个程序出错时的处理,相似iphone的闪退。(虽然闪退也是用户不 愿意看到的,可是在用户体验上明显比那个原生的弹窗好多了) 废话很少说,直接上代码:github
CrashHandler
/** * 自定义的 异常处理类 , 实现了 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 CrashApplication extends Application { @Override public void onCreate() { super.onCreate(); CrashHandler handler = CrashHandler.getInstance(); handler.init(getApplicationContext()); Thread.setDefaultUncaughtExceptionHandler(handler); } }
AndroidManifest.xml
中注册<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/andr oid"package="org.wp.activity" android:versionCode="1" android:ve rsionName="1.0"> <application android:icon="@drawable/icon" android:label="@s tring/app_name" android:name=".CrashApplication" android:debuggable="tru e"> <activity android:name=".MainActivity" android:label="@s tring/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category. LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> </manifest>
至此,能够测试下在出错的时候程序会直接闪退,并杀死后台进程。固然也能够自 定义一些比较友好的出错UI提示,进一步提高用户体验。面试
顺手留下GitHub连接,须要获取相关面试等内容的能够本身去找)
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)api