最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

去除Dialog
Android系統(tǒng)默認(rèn)設(shè)置了一個UnCaughtExceptionHandler,而彈出閃退彈窗的工作就是在這個handler做的。所以如果要去除彈窗,只要實現(xiàn)一個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)然你也可以在每一個Activity中做。對于單個Activity還好,當(dāng)Activity很多的時候就必需實現(xiàn)一個BaseActivity,在BaseActivity中替換,其它Activity要集成BaseActivity。

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

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

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

閃退三次清除數(shù)據(jù)
很多時候是由于后臺返回數(shù)據(jù)錯誤導(dǎo)致的閃退。如果這些數(shù)據(jù)被緩存下來,那么用戶即使再次打開還是會發(fā)生閃退,這時候就只能通過重裝或者清除數(shù)據(jù)的方式才能解決閃退問題,用戶體驗十分不好。所以在多次閃退后自動清除緩存數(shù)據(jù)十分必要。具體實現(xiàn)可以參考我的另一篇博客Android實現(xiàn)多次閃退清除數(shù)據(jù)。不過該博客中使用的是ACRA,一個對UnCaughtExceptionHandler再次封裝的開源項目,讀者可以將ACRA替換為UnCaughtExceptionHandler來實現(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這一步是必需的,因為使用的Context是App的Context,所以必需打開一個新的任務(wù)隊列,否則打開Activity無法生效,如果你替換Handler是在Activity做的,拿到的Context是Activity的Context,則無需這一步。

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

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

相關(guān)文章

  • Android 自定義View實現(xiàn)任意布局的RadioGroup效果

    Android 自定義View實現(xiàn)任意布局的RadioGroup效果

    這篇文章主要介紹了Android 自定義View實現(xiàn)任意布局的RadioGroup,需要的朋友可以參考下
    2018-11-11
  • Android IPC機制綁定Service實現(xiàn)本地通信

    Android IPC機制綁定Service實現(xiàn)本地通信

    本文主要介紹Android IPC機制綁定Service 實現(xiàn)本地通信,通過圖解,代碼等方式給大家解釋Android IPC機制,需要參考的同學(xué)可以看一下
    2016-07-07
  • Android系統(tǒng)服務(wù)概覽

    Android系統(tǒng)服務(wù)概覽

    這篇文章介紹了Android系統(tǒng)服務(wù),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Flutter Image實現(xiàn)圖片加載

    Flutter Image實現(xiàn)圖片加載

    這篇文章主要為大家詳細(xì)介紹了Flutter Image實現(xiàn)圖片加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 移動端開發(fā)之Jetpack?Hilt技術(shù)實現(xiàn)解耦

    移動端開發(fā)之Jetpack?Hilt技術(shù)實現(xiàn)解耦

    Hilt的出現(xiàn)解決前兩點問題,因為Hilt是Dagger針對Android平臺的場景化框架,比如Dagger需要我們手動聲明注入的地方,而Android聲明的地方不都在onCreate()嗎,所以Hilt就幫我們做了,除此之外還做了很多事情
    2023-02-02
  • 詳解Android aidl的使用方法

    詳解Android aidl的使用方法

    AIDL是Android中IPC(Inter-Process Communication)方式中的一種,AIDL是Android Interface definition language的縮寫。這篇文章主要介紹了Android aidl的使用方法,感興趣的朋友跟隨小編一起看看吧
    2020-07-07
  • Android Webview滑進出屏幕閃爍的解決方法

    Android Webview滑進出屏幕閃爍的解決方法

    這篇文章主要給大家介紹了關(guān)于Android Webview滑進出屏幕閃爍的解決方法,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • RecyclerView實現(xiàn)橫向滾動效果

    RecyclerView實現(xiàn)橫向滾動效果

    這篇文章主要為大家詳細(xì)介紹了RecyclerView實現(xiàn)橫向滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Kotlin實現(xiàn)半圓形進度條的方法示例

    Kotlin實現(xiàn)半圓形進度條的方法示例

    這篇文章主要給大家介紹了關(guān)于Kotlin實現(xiàn)半圓形進度條的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Android ndk獲取手機內(nèi)部存儲卡的根目錄方法

    Android ndk獲取手機內(nèi)部存儲卡的根目錄方法

    今天小編就為大家分享一篇Android ndk獲取手機內(nèi)部存儲卡的根目錄方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論

开鲁县| 涡阳县| 高清| 南陵县| 石台县| 观塘区| 平南县| 张北县| 漳州市| 青海省| 巴东县| 五指山市| 天等县| 普洱| 青州市| 永兴县| 三亚市| 广丰县| 于都县| 沙洋县| 都昌县| 五常市| 新疆| 铜鼓县| 潍坊市| 出国| 剑川县| 即墨市| 介休市| 云阳县| 庆元县| 古交市| 大渡口区| 湘潭市| 琼中| 墨玉县| 胶南市| 河源市| 敖汉旗| 南乐县| 祁连县|