System.exit(0)
アプリの起動時にアクティビティがすぐに終了するという問題が発生しました。
プロジェクトでは、アプリの完全な終了を実現するために使用していることがわかりますSystem.exit(0)
が、それを行いますが、アクティビティはプロジェクトでライフサイクルを通過しなかったため、次の方法を使用します:
public class App extends Application {
private int mLock = 0;
@Override
public void onCreate() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
mLock++;
}
@Override
public void onActivityDestroyed(Activity activity) {
try {
//Simulation Activity Destroyed too time consuming and increase the probability of problems
Thread.sleep(300);
} catch (InterruptedException e) {
}
mLock--;
if(mLock<=0){
exit();
}
}
@Override
public void onActivityStopped(Activity activity) {}
@Override
public void onActivityStarted(Activity activity) {}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
@Override
public void onActivityResumed(Activity activity) {}
@Override
public void onActivityPaused(Activity activity) {}
});
}
public void exit() {
System.exit(0);
}
}
しかし、そのような問題が発生します。最後のアクティビティを終了し(アプリを終了)、すぐにアプリを開始すると、アクティビティは終了しましたが、完全に開始されませんでした(フラッシュ終了)。
私 がやりたいことは、すべてのアクティビティが破棄されたときにアプリを終了することですが、問題があります。() を終了し、アクティビティを開始し、System.exit() を呼び出します。この時点でフラッシュ終了が発生します。この問題を回避するにはどうすればよいですか?</p>
さて、私の目的は、この操作プロセスの終了を行う他のアクティビティではなく、デフォルトのスタートアップ アクティビティの破棄の直後に、アプリケーション プロセスを終了することです (いくつかの必要性はありますが、そうすべきであるとは考えていません)。上記の方法を使用して、すべての開始アクティビティがアプリでライフサイクルを完了できるようにします。しかし、それには説明として問題がありました。これはマルチスレッド同期の問題であるはずですが、アプリケーションでスリープしています。なぜスリープ中にアクティビティを作成できるのでしょうか? アプリケーションとアクティビティは同じスレッドではありませんが、スレッド ID は 1 です。