2010-12-08 8 views
6

複数のアクティビティを持つアンドロイドアプリがあり、アクティビティAがBを開始すると、アクティビティbがクラッシュするとプロセスが強制終了されますが、アンドロイドOSによって復活し、アプリをシャットダウンするのではなくアクティビティAを再開します?なぜアンドロイドはアプリをクラッシュさせるのですか?

+0

実際にAをリバイブするか、Bを殺すだけですか? – blindstuff

+0

プロセス全体を再起動しますが、onCreateとonStartだけで起動します。Aを起動します。起動したBがCを起動し、Cがクラッシュする例外があった場合、アンドロイドはアプリケーションプロセスを開始し、Bをフォアグラウンドに配置します。 「戻る」キーを押すともう一度Aキーを押しますが、もう一度Aキーを押します。 – codeScriber

+0

うん、あなたが言ったことを試した、あなたは正しいと思われるが、時にはいつもAに戻るようになっている。誰かが答えを知っていることを願っている。 – blindstuff

答えて

4

クラッシュ後にAndroidがあなたのアプリの状態を正常に回復しようとしていると訴えていますか? ;)

これは、Androidのリソース管理とアクティビティのライフサイクルの結果です。 1つのタスクは、複数のプロセスやアプリにまたがるアクティビティで構成できます。ここで概説したとおり:http://android-developers.blogspot.com/2010/04/multitasking-android-way.html Androidのプロセスは、伝統的な* nixプロセスの意味では「クリーン」にシャットダウンしません。あなたのアプリケーションのコンポーネントはライフサイクルイベントを受け取りますが、ある時点の後に、システムがそのリソースを再利用できるように、警告を表示せずにアプリケーションを強制終了することができます。

たとえば、ユーザーがウェブを閲覧していて、YouTubeのリンクをクリックしてYouTubeのアプリケーションを起動し、共有ボタンをクリックしてお気に入りのソーシャルネットワーキングアプリを起動し、ビデオリンクを投稿するとします。これはすべて同じタスクの一部です。ユーザーが数回押すと、ブラウザのページに戻ります。

ソーシャルネットワーキングアプリを起動すると、システムのメモリが不足していると判断される可能性があり、ブラウザの処理を停止してもっと余裕を持てるようになる可能性があります。つまり、ユーザーは気づきません。)ユーザーが戻るボタンを押してブラウザのアクティビティに戻ると、ユーザーは再起動され、ユーザーが最後に行った状態を再構築します。最悪の場合、ユーザーは物事を再初期化する間に短い遅延を経験する。

しかし、前のアクティビティ状態を復元している同じイベントシーケンスは、同じプロセス内の同じアプリ内でも発生する可能性があります。あなたのシナリオでは、クラッシュの結果としてアクティビティBが閉じました。それで、システムは常にそうすることをします。それは以前のアクティビティ:アクティビティAに戻ります。しかし、アクティビティAのプロセスはまだ周りにはありません(クラッシュします)ので、システムはそれを再起動し、以前の状態を再構築できます。

+0

あなたが言うことは本当ですが、アプリケーションがシグナル3(優雅に殺す)を受信したにもかかわらず、それはまだ劇的に死んでいますが、onDestroyの意味ではなく、アプリケーションのonTerminateが呼び出されることがわかります。 私は文句を言うつもりはありませんが、私は具体的に私に迷惑をかけています。変更できるタスクやプロセスの面がたくさんあるので、それをやめる方法があればいいと思いました。 – codeScriber

関連する問題