2016-11-05 3 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); 
     } 
    } 
} 
관련 문제