1. 程式人生 > 程式設計 >Android 應用Crash 後自動重啟的方法小結

Android 應用Crash 後自動重啟的方法小結

前提

首先,我們肯定要在Application裡面註冊一個CrashHandler,監聽應用crash

public class TestApplication extends MultiDexApplication {
  private static TestApplication mInstance;
  @Override
  public void onCreate() {
    super.onCreate();
    Thread.setDefaultUncaughtExceptionHandler(new CrashHandler());
     }

然後在這個CrashHandler 想辦法重啟應用。有兩種方法如下:

方法1.通過AlarmManager

  public class CrashHandler implements Thread.UncaughtExceptionHandler {
  @Override
  public void uncaughtException(Thread t,Throwable e) {

    //重啟app
    /**
     * 這種方式 功能是可以達成
     * 但是有問題就是如果說你的app掛了 這時候會顯示系統桌面
     * 然後你的app有啟動起來了
     * 給人的感覺不太好
     */
    Intent intent = new Intent();
    Context context = TestApplication.getInstance();
    intent.setClass(context,MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
    PendingIntent pendingIntent = PendingIntent.getActivity(context,intent,PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC,System.currentTimeMillis() + 100,pendingIntent);
    Process.killProcess(Process.myPid());
    System.exit(0);

  }
}

方法2:

使用第三方庫

 implementation 'com.jakewharton:process-phoenix:2.0.0'

public class CrashHandler implements Thread.UncaughtExceptionHandler {
  @Override
  public void uncaughtException(Thread t,Throwable e) {

    ProcessPhoenix.triggerRebirth(TestApplication.getInstance());
  }
}

這個第三方庫的原理是:
當app 崩潰的時候,ProcessPhoenix.triggerRebirth(TestApplication.getInstance());

就會觸發啟動另外一個程序的Activity,然後把當前崩潰的程序結束掉。在新程序的Activity裡面,把應用在自己的程序裡面的啟動起來。

總結

到此這篇關於Android 應用Crash 後自動重啟的文章就介紹到這了,更多相關android 自動重啟內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!