web-dev-qa-db-ja.com

android:onStart()、onStop()をいつ使用するか?

onStart()onResume()の違いを説明するいくつかの投稿を読みました。アクティビティが表示されるとonStart()が呼び出され、onResume()はアクティビティがユーザーからの対話の準備ができたときに呼び出されます。結構です。

私はいつもonPause()onResume()にコードを追加したばかりで、onStart()onStop()に煩わされることはありません。

onStart()onResume()で何をするかについて、具体的な例を誰かに教えてもらえますか? onStop()onPause()についても同じことが言えますが、onStop()はどのように役立ちますか?ここで基本的な何かが欠けているに違いありません。

18

onStop()は、(たとえば)アクティビティを他のアクティビティに残すときに呼び出されます(編集:ほぼ。ダイアログをテーマにしたアクティビティに関するコモンズウェアのコメントを参照してください)。たとえば、アクティビティAでstartActivity()を使用してアクティビティBを開始した場合、アクティビティBを押し戻すと、アクティビティAに戻り、onStartが呼び出されます。

これは、onPauseが呼び出されずにonStopが呼び出される可能性があるいくつかの理由とは異なります。たとえば、画面がタイムアウトしたり、スタンドボタンを押したりすると、onPauseが呼び出されますが、おそらくonStopは呼び出されないため(使用可能なメモリなどによって異なります)、「軽い一時停止」になります。この場合でも、onStopはおそらく最終的に呼び出されますが、すぐには呼び出されません。

わかりましたが、用途は何ですか

多くの場合、特定の用途はありませんが、ある可能性があります。他のアクティビティを開始した後でも、アクティビティはスタック上のメモリ状態を維持するため、そのスタックは、開始されたアクティビティの数(スタックの高さ)とともに増加します。これにより、一部のアプリケーションで大量のメモリが使用される可能性があります。しばらくすると、フレームワークが起動してスタック上のいくつかのアクティビティを強制終了しますが、これはかなり鈍く、戻ったときに多くの状態が保持されることを意味します。

したがって、onStart/onStopの使用例は、アクティビティを別のアクティビティに残すときにある状態を解放し、戻ったときにそれを再作成する場合です。私はこれを使用して、listadaptersをnull、空の画像キャッシュなどに設定しました(非常に特定のアプリケーションで)。リストアダプタで表示されているビューによって使用されているメモリを解放したい場合は、onstartでそれを再作成し、gcがビューを取得できるようにすることができます。これにより、アクティビティの残りのメモリ状態が存続する可能性が高くなります。

一部のリソースは、アクティビティインスタンスが動作している間は十分に節約できると見なすことができ、一部のリソースは、スタックの最前面にある場合にのみ保存できます。アプリケーションに最適なものを決定するのはあなた次第であり、作成/開始/再開の粒度がそれを可能にします。

13

onStart()は、onCreate()がタスクを終了した後に機能します。これは、broadcastReceiverを配置するか、ユーザーがこのアクティビティに戻ったときに常に表示されるUIに関する状態を初期化するのに適した場所です。

onResume()は、戻るボタンを押してインテントまたはアクティビティに戻ったときに機能します。したがって、onPauseは、異なるアクティビティが前面に表示されるたびに呼び出されます。

1
ByteMe

私はあなたの質問がここのドキュメントでかなり説明されていると思います: アクティビティライフサイクル について読んでください

0
Houcine