在作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