0

こんにちは、みんな!

Activity目に見えるレイアウトを表示しながら、かなり多くのメモリを割り当てるがあります。ActivityUIはこのメモリに大きく依存しますが、ユーザーが(通常は別のユーザーActivityをフォーカスに合わせて)離れた後も、これらの割り当てを保持する必要はありません。

Activityメモリの割り当てを開始しonResume()、すべて問題ありません。しかし、私を少し混乱させるのは割り当て解除です。今のところonPause()、対応するUI要素も破棄するすべてのメモリを解放します。Activity実行中はまだ表示されているためonPause()、ユーザーは実際のUI要素が破棄されるのを確認できます。これは醜く、私が望むものではありません。

だから私の質問:

  1. onStop()(ドキュメントによると、が呼び出されActivityたときに表示されない)でメモリを解放(UIを破棄)しても安全ですか?onStop()
  2. onStop()信頼できますか?
  3. onStop()が呼び出されるたびに呼び出されることが保証されていますonPause()か?


編集:
私は私を混乱させるものをもう少し明確に説明しなければならないと感じています。developer.android.comによると:

...強制終了可能としてマークされたメソッドの場合、そのメソッドが戻った後、アクティビティをホストしているプロセスは、コードの別の行が実行されることなく、いつでもシステムによって強制終了される可能性があります。

onStop()メソッドは「強制終了可能」としてマークされています。

  • 上記は(特に " after that method returns"の部分)のスコープ全体onStop()が実行されることが保証されていることを意味しますが、それが返されると、ランタイム(たとえば、で開始された生成されたスレッドonStop())は保証されませんか?

  • それともonStop()、スコープの終わりに達する前に(killed at any timeパートの時点で)中断される可能性があることを意味しますか?

  • それとも、私が-私の神の愚かさの中で-見ない何か他のものを意味するのでしょうか。

4

4 に答える 4

0

違いは、アクティビティはonPauseビューを「破棄」する前に最初に実行を終了する必要があるのに対しonStop、ビューがすでにバックグラウンドになった後に続くライフサイクル ステージであるということです。これは、アクティビティがもう表示されていないことを意味します。

内部で何かをonPause行うと、保存する必要がある項目が手放す前にそのままであることを確認できます。たとえば、EditText にテキストを保存する必要があるか、RadioButtons のオン/オフ位置などを保存する必要があります。

ただし、解放はこれらのことをもう必要としません。onStop

于 2011-11-02T15:26:21.180 に答える
0

いいえ、 onPause() のみが呼び出されることが保証されているため、安全ではありません。onPause() は、アクティビティがフォーカスを失ったことを意味します - 不要なリソースを提供するのに最適な場所です

于 2011-11-02T15:24:20.003 に答える
0

onStop()あなたの目的のために安全で信頼できるものでなければなりません。

この場合、「保証」は相対的なものであり、あなたの活動は何の通知もなく殺される可能性があります。ただし、その場合、メモリ リソースはとにかく解放されます。

于 2011-11-02T15:19:22.000 に答える
0
  1. それは他のものと同じくらい安全ですか?さらに悪いことに、アプリは onDestroy で強制終了されます。モバイル開発では、基本的に、いつでもアプリが強制終了される可能性があると想定する必要があります。
  2. しばらくの間、メディア オブジェクトをリリースすることは私にとって信頼できるものでした。
  3. 何が起こっているかに応じて onDestroy が呼び出されることがあるため、実際には保証されません。
于 2011-11-02T15:22:12.233 に答える