onStop()
読んで(例えば)と呼ばれます:。ほとんどcommonswaresのコメントを見ますダイアログのテーマ活動について)。 たとえば、アクティビティAでstartActivity()
を使用してアクティビティBを開始した場合、アクティビティBで戻るを押すとアクティビティAに戻り、onStart
が呼び出されます。
これはと呼ばれる理由のいくつかとは異なり、onStop
が呼び出されていないと呼ばれることがあります。たとえば、画面がタイムアウトするか、またはスタンバイのボタンを押した場合は、が呼び出されますが、利用可能なメモリやその他のものによってはonStop
ではないため、「軽い休止」です。 onStopはおそらくこの場合でも最終的に呼び出されますが、すぐに呼び出されることはありません。
[OK]を、しかし、どのような使用は
のは、多くの場合、具体的な使用はありませんが、あるかもしれません。他のアクティビティーを開始した後でも、アクティビティーはスタック上にメモリー状態を保持するので、開始されるアクティビティーの数(スタックの高さ)に応じてスタックが増加します。 これにより、一部のアプリケーションで大きなメモリが使用される可能性があります。しばらくすると、フレームワークはスタックに入り、いくつかのアクティビティをスタックで殺しますが、これはむしろ鈍く、おそらく多くの状態が復帰時に保持されることを意味します。
したがって、onStart/onStop
の使用例は、あるアクティビティを別のアクティビティに委ねるときにある状態を解放し、戻ったときにそのアクティビティを再作成する場合です。 私はそれを使用して、null、空のイメージキャッシュおよび同様の(非常に特定のアプリケーションで)listadaptersを設定します。 listadapter内の表示可能なビューで使用されているメモリを解放する場合は、onstartで再作成し、gcがビューを取得できるようにします。これにより、アクティビティの残りのメモリ状態が存続する可能性が高くなります。
一部のリソースは、アクティビティインスタンスが稼働中に保存するだけでなく、一部がスタックの前面にある場合にのみ保存することができます。アプリケーションの中で何が最善であるかを決めるのはあなた次第であり、作成/開始/再開の細かさはあなたに与えられます。
"他のアクティビティのアクティビティを終了するときにonStop()が呼び出されます。"実際にはアクティビティが見えなくなったときに呼び出されます。ダイアログテーマのアクティビティがフォアグラウンドに来ると、 'onStop()'は呼び出されません。 – CommonsWare
良い点。この例では、呼び出し元のアクティビティがバックグラウンドで表示されている可能性があります(リサイクルしたものが悪い)。私はそれが起こる場所の例とそれを使ってメモリ使用量を減らす方法を示していましたが、これは良い免除です。原則としてそれはまだ良いです。私はお互いを呼び出すダイアログアクティビティのスタックをまだ見ていません。 –
ああ、間違いなく、ダイアログをテーマにした活動は珍しいことです。 – CommonsWare