2016-11-05 29 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); 
     } 
    } 
} 
相关问题