您好,登錄后才能下訂單哦!
在做android項(xiàng)目開發(fā)時(shí),大家都知道如果程序出錯(cuò)了,會(huì)彈出來一個(gè)強(qiáng)制退出的彈 出框,這個(gè)本身沒什么問題,但是這個(gè)UI實(shí)在是太丑了,別說用戶接受不了,就連 我們自己本身可能都接受不了。雖然我們?cè)诎l(fā)布程序時(shí)總會(huì)經(jīng)過仔細(xì)的測(cè)試,但是 難免會(huì)碰到預(yù)料不到的錯(cuò)誤。
今天就來自定義一個(gè)程序出錯(cuò)時(shí)的處理,類似iphone的閃退。(雖然閃退也是用戶不 愿意看到的,但是在用戶體驗(yàn)上明顯比那個(gè)原生的彈窗好多了) 廢話不多說,直接上代碼:
CrashHandler
/** * 自定義的 異常處理類 , 實(shí)現(xiàn)了 UncaughtExceptionHandler接口 * */ public class CrashHandler implements UncaughtExceptionHandler { // 需求是 整個(gè)應(yīng)用程序 只有一個(gè) MyCrash-Handler private static CrashHandler INSTANCE ; private Context context; //1.私有化構(gòu)造方法 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("程序掛掉了 "); // 在此可以把用戶手機(jī)的一些信息以及異常信息捕獲并上傳,由于UMeng在 這方面有很程序的api接口來調(diào)用,故沒有考慮 //干掉當(dāng)前的程序 android.os.Process.killProcess(android.os.Process.myPid( )); } }
CrashApplication
/** * 在開發(fā)應(yīng)用時(shí)都會(huì)和Activity打交道,而Application使用的就相對(duì)較少了。 * Application是用來管理應(yīng)用程序的全局狀態(tài)的,比如載入資源文件。 * 在應(yīng)用程序啟動(dòng)的時(shí)候Application會(huì)首先創(chuàng)建,然后才會(huì)根據(jù)情況(Intent)啟 動(dòng)相應(yīng)的Activity或者Service。 * 在本文將在Application中注冊(cè)未捕獲異常處理器。 */ public class CrashApplication extends Application { @Override public void onCreate() { super.onCreate(); CrashHandler handler = CrashHandler.getInstance(); handler.init(getApplicationContext()); Thread.setDefaultUncaughtExceptionHandler(handler); } }
AndroidManifest.xml
中注冊(cè)<?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>
至此,可以測(cè)試下在出錯(cuò)的時(shí)候程序會(huì)直接閃退,并殺死后臺(tái)進(jìn)程。當(dāng)然也可以自 定義一些比較友好的出錯(cuò)UI提示,進(jìn)一步提升用戶體驗(yàn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。