在做android項目開發(fā)時,大家都知道如果程序出錯了,會彈出來一個強制退出的彈 出框,這個本身沒什么問題,但是這個UI實在是太丑了,別說用戶接受不了,就連 我們自己本身可能都接受不了。雖然我們在發(fā)布程序時總會經(jīng)過仔細的測試,但是 難免會碰到預(yù)料不到的錯誤。
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括鹽湖網(wǎng)站建設(shè)、鹽湖網(wǎng)站制作、鹽湖網(wǎng)頁制作以及鹽湖網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鹽湖網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鹽湖省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
今天就來自定義一個程序出錯時的處理,類似iphone的閃退。(雖然閃退也是用戶不 愿意看到的,但是在用戶體驗上明顯比那個原生的彈窗好多了) 廢話不多說,直接上代碼:
CrashHandler
/** * 自定義的 異常處理類 , 實現(xiàn)了 UncaughtExceptionHandler接口 * */ public class CrashHandler implements UncaughtExceptionHandler { // 需求是 整個應(yīng)用程序 只有一個 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("程序掛掉了 "); // 在此可以把用戶手機的一些信息以及異常信息捕獲并上傳,由于UMeng在 這方面有很程序的api接口來調(diào)用,故沒有考慮 //干掉當(dāng)前的程序 android.os.Process.killProcess(android.os.Process.myPid( )); } }
CrashApplication
/** * 在開發(fā)應(yīng)用時都會和Activity打交道,而Application使用的就相對較少了。 * Application是用來管理應(yīng)用程序的全局狀態(tài)的,比如載入資源文件。 * 在應(yīng)用程序啟動的時候Application會首先創(chuàng)建,然后才會根據(jù)情況(Intent)啟 動相應(yīng)的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
中注冊至此,可以測試下在出錯的時候程序會直接閃退,并殺死后臺進程。當(dāng)然也可以自 定義一些比較友好的出錯UI提示,進一步提升用戶體驗。