2016-11-05 6 views
-1

私は時々私に "残念なことにappが停止しました"というエラーが表示されるアプリを持っています。残念なことにこのエラーで停止した場合、受信機や何か私のアプリケーションを実行するものを作ることは可能ですか?どうやってするの?"Unfortunaty app stopped"の場合、Android自動実行アプリ

答えて

0

を使用してみてくださいこれは、アプリケーションのクラッシュを回避し、アプリケーションを再起動し、しかし、あなたがキャッチされない例外ハンドラを作成することによって、これを達成することができますし、良いアイデアではありません。

このようなアクティビティを1つ作成します。

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); 
     } 
    } 
} 
関連する問題