Android 解決因未捕獲異常而崩潰的問(wèn)題

最近時(shí)間不是很緊張(10106還真是不太好受的如筛,哈哈。抒抬。)杨刨,有了罕見(jiàn)的雙休,正好周六是和女票的六周年紀(jì)念日擦剑,這要是周六再加班妖胀,就真是“怪不得程序員沒(méi)有女朋友了”,先放個(gè)美食圖:

將太無(wú)二.png

三里屯的將太無(wú)二店惠勒,味道還可以赚抡,三文魚(yú)刺身我喜歡。纠屋。


今天要說(shuō)的是在Android應(yīng)用中因?yàn)闆](méi)有捕獲異常而導(dǎo)致程序崩潰的問(wèn)題涂臣。

先看張圖(隨便找的):

1346653764_2901.png

在應(yīng)用運(yùn)行過(guò)程中,有很多異辰碓猓可能會(huì)發(fā)生肉康,一般情況我們會(huì)自己處理異常情況,但是也不能面面俱到灼舍,而我們希望在沒(méi)有被捕獲的異常發(fā)生的時(shí)候盡量做到不要讓程序崩潰吼和,并且需要在第一時(shí)間保存現(xiàn)場(chǎng),必要時(shí)將log信息上傳到server骑素,以便在后期版本中修復(fù)炫乓。

如何處理未捕獲的異常呢?
  1. 首先是定義一個(gè)類献丑,我們?nèi)∶麨椋篊rashHandler末捣,然后實(shí)現(xiàn)一個(gè)接口 java.lang.Thread.UncaughtExceptionHandler,要實(shí)現(xiàn)該接口里面的uncaughtException(Thread t, Throwable e)方法 创橄,在這個(gè)函數(shù)里面箩做,我們可以做一些處理,例如將異常信息保存到sdcard上的某個(gè)位置妥畏,或者提示用戶異常出現(xiàn)等等一些操作等邦邦。

代碼:

/**
 * crash異常log捕獲
 * 捕獲到的log會(huì)保存到sdcard文件里
 * @author qizhenghao
 */
public class CrashHandler implements UncaughtExceptionHandler {
    private static CrashHandler instance;
    private Context context;
    /** 系統(tǒng)默認(rèn)的UncaughtException處理類 */
    private Thread.UncaughtExceptionHandler defaultHandler;

    // 單例
    public static CrashHandler getInstance() {
        if (instance == null) {
            instance = new CrashHandler();
        }
        return instance;
    }

    // 初始化
    public void init(Context context) {
        this.context = context;
        defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread arg0, Throwable arg1) {
        DownloadManager.getInstance().clearNotification();
        if (!handleException(arg1) && defaultHandler != null) {
            // 如果用戶沒(méi)有處理則讓系統(tǒng)默認(rèn)的異常處理器來(lái)處理
            defaultHandler.uncaughtException(arg0, arg1);
        } else {
            // 退出進(jìn)程
            System.exit(16);
        }
    }

    // 處理異常
    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return true;
        }
        ex.printStackTrace();
        //保存log信息到本地文件
        Methods.logCrashOnFile(context, ex);

        // 等待1s
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 關(guān)閉進(jìn)程
        int nPid = android.os.Process.myPid();
        android.os.Process.killProcess(nPid);

        return true;
    }

其中Thread.setDefaultUncaughtExceptionHandler(this);是最關(guān)鍵的一行代碼了。

  1. 其次醉蚁,在Application的onCreate()方法中進(jìn)行注冊(cè):
public class ExcApplication extends Application {
    @Override
    public void onCreate() {
        CrashHandler.getInstance().init(getApplicationContext());
    }
}
  1. 最后燃辖,這個(gè)活兒其實(shí)可以交給第三方服務(wù)來(lái)干,如:友盟网棍。
    下面是友盟的截圖:
友盟截圖.png

具體demo還是參考友盟官方的:http://dev.umeng.com/analytics/android-doc/integration?spm=0.0.0.0.1HjVlF

就這樣啦黔龟,這個(gè)問(wèn)題對(duì)于初學(xué)者還是要了解一下,一般在APP的設(shè)計(jì)之初架構(gòu)師早就設(shè)計(jì)好了。但是話又說(shuō)回來(lái)氏身,說(shuō)不好哪天你心血來(lái)潮自己整個(gè)線上的APP了呢巍棱?提前恭喜你吧??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市观谦,隨后出現(xiàn)的幾起案子拉盾,更是在濱河造成了極大的恐慌,老刑警劉巖豁状,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捉偏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泻红,警方通過(guò)查閱死者的電腦和手機(jī)夭禽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谊路,“玉大人讹躯,你說(shuō)我怎么就攤上這事〔埃” “怎么了潮梯?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惨恭。 經(jīng)常有香客問(wèn)我秉馏,道長(zhǎng),這世上最難降的妖魔是什么脱羡? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任萝究,我火速辦了婚禮,結(jié)果婚禮上锉罐,老公的妹妹穿的比我還像新娘帆竹。我一直安慰自己,他們只是感情好脓规,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布栽连。 她就那樣靜靜地躺著,像睡著了一般侨舆。 火紅的嫁衣襯著肌膚如雪升酣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天态罪,我揣著相機(jī)與錄音,去河邊找鬼下面。 笑死复颈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耗啦,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凿菩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帜讲?” 一聲冷哼從身側(cè)響起衅谷,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似将,沒(méi)想到半個(gè)月后获黔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡在验,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年玷氏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腋舌。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盏触,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出块饺,到底是詐尸還是另有隱情赞辩,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布授艰,位于F島的核電站辨嗽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏想诅。R本人自食惡果不足惜召庞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望来破。 院中可真熱鬧篮灼,春花似錦、人聲如沸徘禁。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)送朱。三九已至娘荡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驶沼,已是汗流浹背炮沐。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留回怜,地道東北人大年。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親翔试。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轻要,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)垦缅,斷路器冲泥,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 東方剛泛白不久我就吃過(guò)飯了,我扛著高粱秸做的魚(yú)竿向村東的小河奔去壁涎。 我路過(guò)他們身旁凡恍,他們都端著或大或小、或精細(xì)或粗...
    yhj靈閱讀 228評(píng)論 0 0
  • 先生鹽亭龍顧井人粹庞,父品三咳焚,母氏譚。袁庞溜,譚皆邑之望族革半。以先生夙慧,課責(zé)綦嚴(yán)流码。年十三即遣應(yīng)童子試又官,名列前茅,老宿震之漫试。...
    李自申閱讀 256評(píng)論 0 0
  • 邁克威爾史密斯閱讀 154評(píng)論 0 0