Android Lifecycle:onstart()またはonresume()でアクティビティのデータを入力しますか?
質問
カーソルを介してデータを取得し、ウィンドウタイトルの設定など、画面上のデータを入力した場合 onStart()
また onResume()
?
onStart()
その後のために論理的な場所のように思えるでしょう onStart()
アクティビティはすでに可能です 表示されます, 、バックグラウンドではありますが。特に、私はaで問題を抱えていました 管理されたダイアログ それは私にこれを再考させました。ダイアログがまだ開いている間にユーザーが画面を回転させる場合、 onCreateDialog()
と onPrepareDialog()
呼ばれています の間に onStart()
と onResume()
. 。ダイアログがデータに基づいている必要がある場合は、前にデータを持つ必要があります onResume()
.
私が正しいなら onStart()
その後、なぜ メモ帳の例 それを行うことで悪い例を挙げてください onResume()
?見る http://developer.android.com/resources/samples/notepad/src/com/example/android/notepad/noteeditor.html noteeditor.java Line 176(title = mCursor.getString...
).
また、私のアクティビティが私のカーソルが追跡しているデータを変更する別のActVity/ダイアログを起動した場合はどうなりますか。最も簡単な場合でも、それは私が手動でしなければならないことを意味します アップデート 私の以前の画面(メインアクティビティのダイアログのリスナー)、またはcontentobserverを登録する必要があります。これは、onResume()のデータを更新しなくなったためです(もちろん2回更新できます)。
私はそれが基本的な質問であることを知っていますが、対話はごく最近、驚いたことに、私にこれを実感させました。
解決
NoteeDitorについての質問に答えるには、あなたが引用するものの上の線を見てください。
// Requery in case something changed while paused (such as the title)
mCursor.requery();
コメントはそれをすべて説明しているようです。私は自分でノートパッドの例を通過していませんが、著者は、ノティーダルが一時停止されている(そして再開された)間に変化から回復する能力を構築しているようです。
Gsreeが説明しているように(私がこれを入力している間)、正しい答えや間違った答えはなく、それは単にアクティビティライフサイクルのどの時点で何をする必要があるかに依存します。
他のヒント
繰り返しますが、解決策はあなたに合ったものに依存します。
カーソルをアプリケーションごとに1回事前に入力する必要がある場合(および変更について気にしないでください。onCreate()で実行できます。このメソッドは、アプリプロセスが殺され、アプリが再現された場合にのみリコールされます。
目に見える寿命が始まるたびにカーソルを事前に引用したい場合(ほとんどの場合、サービス/ブロードキャストがアクティビティを呼び出している場合は、onstart()を使用する必要があります。
カーソルをすべての前景の活動の活動に備えて事前に設定したい場合は、onResume()を使用する必要があります。したがって、ダイアログボックスまたはいくつかの情報を変更する別のサバアクティビティがあり、したがってカーソルをリロードする場合は、onResume()で行うのが最善です。この方法の欠点は、アクティビティが前景に来るたびに、カーソルがリロードされることです。
これが明らかになることを願っています