バックグラウンド
私が作成したどのアプリでも見たことのない非常に奇妙な状況があります。
アプリには複数のアクティビティがありますが、最初のアクティビティは一部の初期化とスプラッシュ スクリーンに使用されます。
問題
アプリにアクティビティ "A"、"B"、"C"、... があり、エンド ユーザーが "A" (スプラッシュ スクリーンの最初のもの) から "B" に移動し、ホームキー、ランチャーのアイコンをクリックしてアプリに戻ります。
要するに、シナリオは次のとおりです。
アプリの起動 -> アクティビティ A (スプラッシュ) -> アクティビティ B -> ホームを押す -> アプリに戻る (ランチャー経由) -> ?
期待される結果: アプリは最後に表示されたアクティビティに戻る必要があります。つまり、「?」= アクティビティ B
実際の結果: アプリは実際にアクティビティ "A" に戻りました。これは、"?" を意味します。= アクティビティ A 、その後、残したアクティビティ (この場合は B )
マニフェストとコードはすべて非常に標準的なため、表示する内容はあまりありません。
問題解決の手がかり
ただし、この原因について何かを伝える手がかりがいくつかあります。
各アクティビティは、画像を表示するためにいくらかのメモリを消費する可能性がありますが、多くは消費していません。
RoboSplashActivity から拡張されたスプラッシュ スクリーン アクティビティを含め、すべてのアクティビティは roboSherlock アクティビティ バリアントから拡張されます。
最初のアクティビティ (スプラッシュ スクリーン) では、super.andFinishThisOne(); の呼び出しを許可しませんでした。andFinishThisOne メソッド内で、ロボギー インジェクション以外のものを初期化する必要があるためです。ただし、すべての準備が整ったら、新しいアクティビティを開始し、finish() を使用して現在のアクティビティを閉じます。
同様のシナリオを説明するバグ レポート (こちら) があります。どれだけ似ているか、それを処理するために何ができるかわかりません。
これまでに試したこと
これまでに次の解決策を試しました:
マニフェストの最初のアクティビティ (主に launchMode ) のさまざまなフラグとプロパティを試してみましたが、状況を改善するものはありませんでした。
finish() を呼び出さずに、スプラッシュ画面の activity で startActivityForResult を使用しました。それも機能せず、アクティビティを再作成しました。
今のところ、ルート アクティビティでない場合に備えて最初のアクティビティをスキップする次のコードを追加しただけですが、これは実際の解決策というよりは回避策のようなものです。
if (!isTaskRoot()) {
finish();
return;
}