2016-11-05 68 views

回答

0

這是不是爲了避免應用程序崩潰並重新啓動應用程序是一個好主意,但是,你可以通過一個未捕獲的異常處理程序實現這一目標。

創建一個這樣的活動。

public class BaseActivity extends AppCompatActivity{ 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 

      @Override 
      public void uncaughtException(Thread thread, Throwable ex) { 
       ex.printStackTrace(); 
       android.os.Process.killProcess(android.os.Process.myPid()); 
       Intent intent = new Intent(); 
       intent.setPackage(<Your Application Package>); 
       startActivity(intent); 
      } 
     }); 
    } 
} 

現在將您所有的活動擴展到這個類。

0

嘗試使用方法Thread.setDefaultUncaughtExceptionHandler()

public class MyApp extends Application { 
    private static final String TAG = "MyApp"; 
    private static final String KEY_APP_CRASHED = "KEY_APP_CRASHED"; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); 
     Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
      @Override 
      public void uncaughtException(Thread thread, Throwable exception) { 
       // Save the fact we crashed out. 
       getSharedPreferences(TAG , Context.MODE_PRIVATE).edit() 
        .putBoolean(KEY_APP_CRASHED, true).apply(); 
       // Chain default exception handler. 
       if (defaultHandler != null) { 
        defaultHandler.uncaughtException(thread, exception); 
       } 
      } 
     }); 

     boolean bRestartAfterCrash = getSharedPreferences(TAG , Context.MODE_PRIVATE) 
       .getBoolean(KEY_APP_CRASHED, false); 
     if (bRestartAfterCrash) { 
      // Clear crash flag. 
      getSharedPreferences(TAG , Context.MODE_PRIVATE).edit() 
       .putBoolean(KEY_APP_CRASHED, false).apply(); 
      // Re-launch from root activity with cleared stack. 
      Intent intent = new Intent(this, MyRootActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
    } 
} 
相關問題