StartActivity私のアプリには、次のように宣言されているものを含む、いくつかのアクティビティがあります
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
マニフェストで。サブクラスもあり、Applicationここでいくつかの初期化タスクが開始されます。初期化コードはバックグラウンド スレッドで実行されるため、StartActivity単にスプラッシュ スクリーンを表示し、バックグラウンドの初期化が完了するのを待ちます。初期化が完了するまで、制御が他のアクティビティに渡らないことが重要です。
時折、アプリが実行された後、ユーザーが HOME キーを押してバックグラウンドに送信され、他のアプリが開いている可能性があります。しばらくしてランチャーからアプリを再起動すると、アプリが最後に開いたときにアクティブだったアクティビティでアプリが正常に再開されます。これで問題ありません。
アプリが再起動されるまでに数時間の遅延があると、おかしなことが起こり始めます。プロセスが再起動されたようです - ログ出力から、 myApplication.onCreate()が呼び出され、バックグラウンドの初期化タスクが開始されたことがわかります - しかし、重大なことに、プロセスStartActivityはバイパスされ、システムは前回アクティブだったアクティビティに直接移動しようとしました。アプリが開いていました。
これは私には不可能な状況のように思えます。MAINプロセスが再起動されて (おそらく非アクティブなために以前に終了された後)、非アクティビティに直接ジャンプすることは決して可能であってはなりません。アプリが生きていて、最後に使用されたアクティビティを簡単に再開でき、アプリを再初期化する必要はありません。または、アプリが停止しており、MAINアクティビティの起動を含め、最初から再初期化する必要があります。この奇妙なゾンビ状態であってはなりません。
私の理解が間違っているのでしょうか、それとも Android がまったくおかしなことをしているのでしょうか?
関連する可能性があります: Android: クラスはいつシステムによってアンロードされますか?