onStart()遷移状態の意味がわかりません。onResume()この方法は、常に後に呼び出されますonStart()。なぜonResume()呼び出されonRestart()、onCreate()メソッドが除外されonStart()ないのですか?その目的は何ですか?
なしでは生きられないのはなぜですかonStart()。私はまだそれを冗長だと考えています(おそらくその意味を完全に理解していないためです)。
onStart()遷移状態の意味がわかりません。onResume()この方法は、常に後に呼び出されますonStart()。なぜonResume()呼び出されonRestart()、onCreate()メソッドが除外されonStart()ないのですか?その目的は何ですか?
なしでは生きられないのはなぜですかonStart()。私はまだそれを冗長だと考えています(おそらくその意味を完全に理解していないためです)。
回答:
onRestart()およびonCreate()メソッドの後にonStart()を除いてonResume()を呼び出すことができないのはなぜですか?その目的は何ですか?
はい、最初の回答はかなり長かったので、これ以上拡張しないので、試してみましょう...
public DriveToWorkActivity extends Activity
implements onReachedGroceryStoreListener {
}
public GroceryStoreActivity extends Activity {}
注意してください:super.onCreate(...)などの呼び出しを意図的に省略しました。これは疑似コードなので、ここで芸術的なライセンスを取得してください。;)
DriveToWorkActivityフォローする方法...
protected void onCreate(...) {
openGarageDoor();
unlockCarAndGetIn();
closeCarDoorAndPutOnSeatBelt();
putKeyInIgnition();
}
protected void onStart() {
startEngine();
changeRadioStation();
switchOnLightsIfNeeded();
switchOnWipersIfNeeded();
}
protected void onResume() {
applyFootbrake();
releaseHandbrake();
putCarInGear();
drive();
}
protected void onPause() {
putCarInNeutral();
applyHandbrake();
}
protected void onStop() {
switchEveryThingOff();
turnOffEngine();
removeSeatBeltAndGetOutOfCar();
lockCar();
}
protected void onDestroy() {
enterOfficeBuilding();
}
protected void onReachedGroceryStore(...) {
Intent i = new Intent(ACTION_GET_GROCERIES, ..., this, GroceryStoreActivity.class);
}
protected void onRestart() {
unlockCarAndGetIn();
closeDoorAndPutOnSeatBelt();
putKeyInIgnition();
}
OK、それはまた別の長い(ごめん)しかし、これが私の説明です...
onResume()運転を始めるonPause()ときと一時停止するときです。それで私は運転して、赤いライトに到達するので、一時停止します...ライトが緑になり、再開します。別の赤いライトと私は一時停止し、それから緑になるので再開します。onPause() -> onResume() -> onPause() -> onResume()ループはタイト一つであり、私の旅を通じて何度も発生します。
ループが停止して再起動(私の旅を続けるための準備)から再開するまでは、おそらくあまり一般的ではありません。あるケースでは、私は食料品店を見つけ、それGroceryStoreActivityを開始しました(私DriveToWorkActivityをのポイントに強制しますonStop())。店から戻ったとき、私は通り抜けonRestart()、onStart()そして再び旅を再開します。
私は、中のコード置くことonStart()の両方にonCreate()とonRestart()して上書きする気にしないでonStart()ニーズの間行われることをより多くのすべてではなく、onCreate() -> onResume()そしてonRestart() -> onResume()、より多くの私は複製してる事を。
だから、もう一度引用し直すと...
onRestart()およびonCreate()メソッドの後にonStart()を除いてonResume()を呼び出すことができないのはなぜですか?
オーバーライドしない場合onStart()、これが効果的に起こります。のonStart()メソッドはActivity暗黙的に呼び出されますが、コード内の効果は事実上onCreate() -> onResume()またはonRestart() -> onResume()です。
onCreate()し、onRestart()一般的なコードの多くを共有することになり、右?
Activityライフサイクルの各段階がどのように使用されるかを説明するためだけのものです。onCreate(...)インスタンスメンバー(UI要素など)のインスタンス化に関しては、作成段階で多くのことを行うことができますが、「再起動」でこれを行う必要はありません。現実には、多くのActivities本当に以上実装する必要はありませんonCreate(...)、onResume()そしてonPause()他の方法は、あなたが他の事をする必要がある場合がありますケースのために利用可能であり、鍵はどこのコードを入れて理解することです。
Activityライフサイクルメソッドを明示的に呼び出しません。それを行うのはAndroid OSであり、それは非常に効率的に行われます(アプリ開発者が何をしているのかを知っており、効率的にコーディングしていると仮定します)。多くのAndroid開発を行うと、なぜ物事が彼らのように機能するのかがわかります。100%完璧ではありませんが、それはかなり良いことです。
onStartとは、onResume「可視性」と「ユーザーとの対話」のことです。この車の運転の比喩は混乱を招き、あまり役に立たない。
短い答え:
onStartがなければ、アクティビティはユーザーに「見える」状態になります。ただし、ユーザーはそれと「対話」できず、他の小さなダイアログと重複する可能性があります。ユーザーと対話するこの機能は、onStartとonResumeを区別するものです。ガラスのドアの後ろにいる人と考えてください。あなたはその人を見ることができますが、彼とやり取りする(話す/聞く/握手する)ことはできません。OnResumeは、ドアオープナーのようなものであり、その後対話を開始できます。
さらに、onRestart()は最も理解されていないものです。onRestart()の代わりにonStop()の後に直接onStart()またはonResume()に移動しない理由について質問できます。作成部分が省略されている場合、onRestart()がonCreate()と部分的に同等であることに注意すると、理解が容易になります。基本的に、両方の状態がonStart()につながります(つまり、アクティビティが表示されます)。したがって、両方の州が表示されるものを「準備」する必要があります。OnCreateには、表示されるものを「作成」する追加の責任があります。
したがって、それらのコード構造は次のようなものに適合します。
onCreate()
{
createNecessaryObjects();
prepareObjectsForDisplay();
}
onRestart()
{
prepareObjectsForDisplay();
}
Googleが次のようなものではなく、直感的でない名前を選択したため、全体の混乱が引き起こされます。
onCreateAndPrepareToDisplay() [instead of onCreate() ]
onPrepareToDisplay() [instead of onRestart() ]
onVisible() [instead of onStart() ]
onBeginInteraction() [instead of onResume() ]
onPauseInteraction() [instead of onPause() ]
onInvisible() [instead of onStop]
onDestroy() [no change]
アクティビティ図は次のように解釈されます。

onResume() と呼ばれます:
onStart()Activity前景に来るとき。http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleから:

「Hello、Android、Introducing Google's Mobile Development Platform」という本は、Androidアプリのライフサイクルをわかりやすく説明しています。幸いなことに、彼らは抜粋としてオンラインで特定の章を持っています。http://media.pragprog.com/titles/eband3/concepts.pdfの 39ページの図を参照して ください
ちなみにこの本はアンドロイド初心者にもオススメです!
特に派手な例は、を使用してアクティビティからマネージダイアログを表示することにした場合ですshowDialog()。ダイアログが開いたままの状態でユーザーが画面を回転させると(これを「構成の変更」と呼びます)、メインアクティビティはまでのすべての終了ライフサイクル呼び出しを通過し、onDestroy()再作成され、ライフサイクルを遡ります。ただし、予期しない可能性があるのは、onCreateDialog()との間ですonPrepareDialog()(実行時に呼び出され、showDialog()今度は自動的にダイアログを再作成するためのメソッド-管理されたダイアログであるため自動的に)との間 onStart()で呼び出されonResume()ます。ここでのポイントは、ダイアログが全画面をカバーしないため、メインアクティビティの一部が表示されたままになることです。詳細ですが重要です!
onStart()
onStart()、UIに影響を与える変更を監視できます。onStop()で登録を解除する必要があります。onResume()
onStart() 通常は、戻り値が次のようなバックグラウンドスレッドに作業をディスパッチします。
START_STICKY:強制終了した場合に自動的に再起動し、アクティブな状態を維持します。
START_REDELIVER_INTENT 自動再起動のため、stopSelf()の前にサービスが強制終了された場合は再試行します。
onResume()デバイスがスリープ状態になった後、またはアラートまたはその他の部分画面の子アクティビティが前のウィンドウの一部を表示したままにした後、メソッドがフィールドを再初期化する必要がある(例外のキャッチ付きのtry構造内で)OSによって呼び出されます)。このような状況ではonStop()、子が閉じても呼び出されません。
onResume()onStart()アクティビティがバックグラウンドから再開されるときに呼び出されません詳細については、Android_activity_lifecycle_gotchaおよびActivity Lifecycleをご覧ください。
うまくいけば、簡単な説明:-
onStart() ->アクティビティが表示されたときに呼び出されますが、フォアグラウンドにない可能性があります(たとえば、AlertFragmentが一番上にあるか、他の考えられる使用例です)。
onResume() ->アクティビティがフォアグラウンドにある場合、またはユーザーがアクティビティと対話できる場合に呼び出されます。
onStart()とonResume()の呼び出しの間に発生することがあることに注意してください。つまり、私が痛々しく見つけたonNewIntent()です。
SINGLE_TOPフラグを使用していて、インテントエクストラを使用して一部のデータをアクティビティに送信する場合、 onStart()の後とonResume()の前に呼び出されるonNewIntent()でのみアクセスできます。そのため、通常は、エクストラから新しい(たぶん変更されただけの)データを取得してクラスメンバーに設定するか、setIntent()を使用して新しいインテントを元のアクティビティインテントとして設定し、onResume()でデータを処理します。
http://developer.android.com/training/basics/activity-lifecycle/starting.htmlへの参照
onResume()アクティビティがユーザーとの対話を開始する直前に呼び出されます。この時点で、アクティビティはアクティビティスタックの最上位にあり、ユーザー入力がアクティビティに送られます。常にが続きonPause()ます。
onPause()システムが別のアクティビティを再開しようとしているときに呼び出されます。このメソッドは通常、保存されていない変更を永続データにコミットしたり、アニメーションを停止したり、CPUを消費している可能性があるものを停止したりするために使用されます。次のアクティビティは復帰するまで再開されないため、非常に迅速に何でも実行する必要があります。onResume()アクティビティが前面に戻ったonStop()場合、またはユーザーから見えなくなる場合に続きます。
これが答えとしてカウントされるかどうかはわかりませんが、違いを説明するGoogleのコース(Kotlinを使用したAndroidアプリの開発)からのYouTubeビデオはこちらです。