欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android去除煩人的默認(rèn)閃退Dialog

 更新時(shí)間:2016年04月11日 16:00:00   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Android去除煩人的默認(rèn)閃退Dialog的相關(guān)方法,感興趣的小伙伴們可以參考一下

安卓應(yīng)用閃退后總會出現(xiàn)一個(gè)“抱歉,App已經(jīng)停止運(yùn)行”的彈窗,這樣的用戶體驗(yàn)并不好。很多大廠的App都去除了這個(gè)彈窗,因此本文主要介紹如何去除默認(rèn)閃退彈窗,以及在閃退時(shí)做一些必要的善后工作。

UnCaughtExceptionHandler
UnCaughtExceptionHandler能夠在Thread遇到未catch住的Exception而終止前做一些善后工作。但是它無法阻止線程停止運(yùn)行,線程最后還是要退出。

 Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
   @Override
   public void uncaughtException(Thread thread, Throwable ex) {
    System.exit(1);
   }
  });

去除Dialog
Android系統(tǒng)默認(rèn)設(shè)置了一個(gè)UnCaughtExceptionHandler,而彈出閃退彈窗的工作就是在這個(gè)handler做的。所以如果要去除彈窗,只要實(shí)現(xiàn)一個(gè)UnCaughtExceptionHandler并替換掉系統(tǒng)默認(rèn)的就可以了,代碼如下。

public class App extends Application {


 @Override
 public void onCreate() {
  super.onCreate();
  Thread.setDefaultUncaughtExceptionHandler(new MyUnCaughtExceptionHandler());
 }



 class MyUnCaughtExceptionHandler implements Thread.UncaughtExceptionHandler{

  @Override
  public void uncaughtException(Thread thread, Throwable ex) {
   ex.printStackTrace();
   // do some work here

  android.os.Process.killProcess(android.os.Process.myPid());
   System.exit(1);
  }
 }
}

以上的替換UnCaughtExceptionHandler的工作是在Application中統(tǒng)一做的,當(dāng)然你也可以在每一個(gè)Activity中做。對于單個(gè)Activity還好,當(dāng)Activity很多的時(shí)候就必需實(shí)現(xiàn)一個(gè)BaseActivity,在BaseActivity中替換,其它Activity要集成BaseActivity。

必要的善后工作
為了處理閃退,提升用戶體驗(yàn),有必要做一些善后工作,主要有幾條羅列如下:

異常上報(bào)
可以采用郵件或者通過服務(wù)器接口上傳的方式。兩者各有優(yōu)缺點(diǎn),郵件方式開發(fā)簡單,但需要用戶額外操作,用戶體驗(yàn)較差。如果用上傳服務(wù)器方式,因?yàn)樵赨nCaughtExceptionHandler中不能打開一個(gè)新的線程,所以只能同步請求,在網(wǎng)絡(luò)情況不好的時(shí)候花費(fèi)時(shí)間會較長而阻塞運(yùn)行。也可能因?yàn)榫W(wǎng)絡(luò)原因而上報(bào)失敗。當(dāng)然總體下來還是上傳服務(wù)器好一點(diǎn)。具體實(shí)現(xiàn)留給讀者。

記錄日志
將閃退信息存儲到文件系統(tǒng)中。不能存到SharedPreferences中,因?yàn)榇蜷_SP需要使用一個(gè)新的線程(Android內(nèi)部實(shí)現(xiàn)),而這在UnCaughtExceptionHandler中,這是不被允許的。

閃退三次清除數(shù)據(jù)
很多時(shí)候是由于后臺返回?cái)?shù)據(jù)錯誤導(dǎo)致的閃退。如果這些數(shù)據(jù)被緩存下來,那么用戶即使再次打開還是會發(fā)生閃退,這時(shí)候就只能通過重裝或者清除數(shù)據(jù)的方式才能解決閃退問題,用戶體驗(yàn)十分不好。所以在多次閃退后自動清除緩存數(shù)據(jù)十分必要。具體實(shí)現(xiàn)可以參考我的另一篇博客Android實(shí)現(xiàn)多次閃退清除數(shù)據(jù)。不過該博客中使用的是ACRA,一個(gè)對UnCaughtExceptionHandler再次封裝的開源項(xiàng)目,讀者可以將ACRA替換為UnCaughtExceptionHandler來實(shí)現(xiàn)。

重新打開App
可以在UnCaughtExceptionHandler中重新打開App或者彈出自定義彈窗。

 class MyUnCaughtExceptionHandler implements Thread.UncaughtExceptionHandler{

  @Override
  public void uncaughtException(Thread thread, Throwable ex) {
   ex.printStackTrace();
   
   Intent intent = new Intent(App.this, MainActivity.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   App.this.startActivity(intent);

   android.os.Process.killProcess(android.os.Process.myPid());
   System.exit(1);
  }
 }

注意setFlags這一步是必需的,因?yàn)槭褂玫腃ontext是App的Context,所以必需打開一個(gè)新的任務(wù)隊(duì)列,否則打開Activity無法生效,如果你替換Handler是在Activity做的,拿到的Context是Activity的Context,則無需這一步。

注意事項(xiàng)
最主要的注意點(diǎn)我之前已經(jīng)提到,不要在UnCaughtExceptionHandler中新開一個(gè)線程,會拋出異常。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • RecyclerView實(shí)現(xiàn)流式標(biāo)簽單選多選功能

    RecyclerView實(shí)現(xiàn)流式標(biāo)簽單選多選功能

    RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。這篇文章主要介紹了RecyclerView實(shí)現(xiàn)的流式標(biāo)簽單選多選功能,需要的朋友可以參考下
    2019-11-11
  • Android中通過外部程序啟動App的三種方法

    Android中通過外部程序啟動App的三種方法

    這篇文章主要介紹了Android中通過外部程序啟動App的三種方法,本文講解了直接通過包名、通過自定義的Action、通過Scheme三種方法,并分別給出操作代碼,需要的朋友可以參考下
    2015-04-04
  • RxJava2配置及使用詳解

    RxJava2配置及使用詳解

    這篇文章主要介紹了RxJava2配置及使用詳解,RxJava2.0是一個(gè)非常棒的流式編程,有興趣的可以了解一下
    2017-06-06
  • Android編程中延后處理事件的方法小結(jié)

    Android編程中延后處理事件的方法小結(jié)

    這篇文章主要介紹了Android編程中延后處理事件的方法,總結(jié)分析了Handler和TimerTask相結(jié)合以及使用postDelayed實(shí)現(xiàn)延后處理事件的相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載

    android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載

    這篇文章主要為大家詳細(xì)介紹了android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • android?WindowManager的簡單使用實(shí)例詳解

    android?WindowManager的簡單使用實(shí)例詳解

    這篇文章主要介紹了android?WindowManager的簡單使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 一個(gè)簡單的Android軌跡動畫

    一個(gè)簡單的Android軌跡動畫

    這篇文章主要為大家詳細(xì)介紹了一個(gè)簡單的Android軌跡動畫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Android應(yīng)用隱私合規(guī)檢測實(shí)現(xiàn)方案詳解

    Android應(yīng)用隱私合規(guī)檢測實(shí)現(xiàn)方案詳解

    這篇文章主要介紹了Android應(yīng)用隱私合規(guī)檢測實(shí)現(xiàn)方案,我們需要做的就是提前檢測好自己的應(yīng)用是否存在隱私合規(guī)問題,及時(shí)整改過來,下面提供Xposed Hook思路去檢測隱私合規(guī)問題,建議有Xposed基礎(chǔ)的童鞋閱讀,需要的朋友可以參考下
    2022-07-07
  • Android打開系統(tǒng)相機(jī)并拍照的2種顯示方法

    Android打開系統(tǒng)相機(jī)并拍照的2種顯示方法

    這篇文章主要介紹了Android打開系統(tǒng)相機(jī)并拍照的2種顯示方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Android?WindowManger實(shí)現(xiàn)桌面懸浮窗功能

    Android?WindowManger實(shí)現(xiàn)桌面懸浮窗功能

    這篇文章主要介紹了Android?WindowManger實(shí)現(xiàn)桌面懸浮窗功能,他們基本都是在Activity之上顯示的,如果想實(shí)現(xiàn)在桌面顯示的懸浮窗效果,需要用到WindowManager來實(shí)現(xiàn)了,需要的朋友可以參考下
    2023-04-04

最新評論