2012-03-20 11 views
0

別のアクティビティ(C)を呼び出すリストビューアクティビティ(B)を呼び出すスプラッシュアクティビティ(A)があります。 私がアクティビティCを実行しているときにホームを押すと、アプリケーションを終了する(またはAndroidがそれをするのを待っている)より、longpressホームよりもアクティビティCに戻ると奇妙な問題が発生する: 戻るをクリックするとB.私は、バックボタンハンドラを持っています。終了するかどうかをユーザに尋ね、アクティビティに対してfinish()を呼び出します。このシナリオで終了しようとすると、アクティビティAが再び開始されます。Androidアクティビティのライフサイクル - 履歴からのアクティビティの再開

通常の操作ではBを終了し、Aに戻りません。 なぜですか?

おかげ

+0

「このシナリオで終了しようとすると」と言うと、「終了」とはどういう意味ですか?どのように「出る」? –

+0

finish()を呼び出すことによって –

+0

あなたはActivityBで戻るボタンの押下をキャッチし、ActvityAで 'finish()'を呼び出すことを意味しますか? –

答えて

1

をロードするときにAの仕上げを()を呼び出していることを確認します。しかし、Androidはアクティビティスタックの状態を覚えています(あなたの場合はA→B→C)。

ユーザーがアプリに戻ると、Androidはアプリの新しいプロセスを作成し、アクティビティスタックの先頭にあるアクティビティ(この場合はC)を再作成します()。今度はユーザがBACKを押すとアクティビティCが終了し、AndroidはアクティビティBのインスタンスを再作成します(B.onCreate()B.onStart()B.onResume()へのコールが表示されます)。

ここで、ユーザーは再度BACKを押します。あなたのバックボタンハンドラはアクティビティAでfinish()を呼び出そうとしますが、アクティビティAのインスタンスはありません。Androidはまだそれを作成していません!アクティビティBが終了すると、AndroidはBの下のアクティビティスタックにアクティビティAのインスタンスがあることを記憶しているので、アクティビティAのインスタンスが再作成されます(A.onCreate(),およびA.onResume()へのコールが表示されます)。

これはあなたが見ていることを説明してくれることを願っています。

1

あなたはB

(あなたによって、またはAndroidのいずれかによって)あなたのアプリケーションをホストするプロセスに殺されているアプリが殺され
+0

ありがとう!それは問題を解決するために解決するようだ。 BTW - ICS上では、アプリを強制終了しなくても発生しました。アクティビティBの終了時に、それが再開しました。A.非常に奇妙です。 –

+0

アクティビティスタックは、最初は複雑になり、その力を理解するのに時間がかかります:) – Mimminito

関連する問題