0

SO でonDestroy がいつ呼び出されるかについての質問に答えると、Android ドキュメントで矛盾しているように見えるものが発生しました。

タスクとバックスタックに関するAndroidドキュメントによると

「ユーザーが [戻る] ボタンを押すと、現在のアクティビティがスタックの一番上からポップされ (アクティビティは破棄されます)、以前のアクティビティが再開されます (UI の以前の状態が復元されます)。」

ただし同時に、Android のライフサイクルは、アクティビティが自動的に破棄されるのではなく、UI が部分的に非表示になっている場合は一時停止し、UI が完全に非表示になっている場合は停止し、システムのリソースが不足している場合にのみ破棄されることを示唆しています。

これらは2つの反対の立場です。それで私の質問は - それはどれですか?

@Raghunandan に、しばらくの間コメントでやり取りしてくれたことに感謝します。うまくいけば、答えが得られるでしょう。

4

2 に答える 2

1

どちらもその文脈では正しいです。おそらく、ライフサイクルは「システムのリソースが不足している場合、またはスタックからポップされた場合にのみ破棄される」と言う必要があります。

たとえば、これを考えてみましょう。アクティビティ A から開始し、次にアクティビティ B を A から開始し、次にアクティビティ C を B から開始します。

  • 現在、A と B の両方が一時停止および停止されていますが、破棄されていません
  • C がリソースを大量に使用している場合、A または B が破壊される可能性があります。

アクティビティ C から [戻る] ボタンを押すと、アクティビティ B に戻ります。

  • アクティビティ C は一時停止、停止、および破棄されます。

戻るボタンをもう一度押すと、アクティビティ A に戻ります。

  • アクティビティ B は一時停止、停止、および破棄されます

システムは、すべてのアクティビティ インスタンスを保持して、すばやく再開できるようにします。ただし、アクティビティがスタックからポップされると、少なくとも同じインスタンスではなく、ユーザーが将来それらを再度開く方法はありません。

于 2013-06-20T22:04:18.987 に答える
0

この 2 つのステートメントに矛盾はありません。

onDestroyonBackPressedを呼び出さないためにオーバーライドするか、オーバーライドして呼び出さfinish()ないという奇妙なことをしない限り、BACK を押すと が呼び出されfinishますsuper.finish()

への呼び出しを停止しない場合はActivity.finish常に呼び出されます。onDestroy

他のステートメントは、戻るを押すことについて何も述べていません。ここで提供されたリンクの下にどこにも見つかりません。

システムのリソースが不足している場合にのみ破棄されます。

onDestroyアプリのリソースが不足しているときに呼び出されることに加えて (奇妙なことに、私の電話では発生しません。OOM が発生します)、グローバルに (すべてのアプリケーションから) 20 個の他のアクティビティがこの後に開始されたときに呼び出されます。

また、呼び出されないという本当の理由でonDestroy が再度呼び出される場合について、さらに別の回答を確認することをお勧めしますonDestroy

于 2013-06-20T22:18:27.143 に答える