1. ホーム
  2. android

[解決済み] onStart()とonResume()の違いについて

2022-04-14 02:04:39

質問

の意味がわかりません。 onStart() の遷移状態です。は onResume() メソッドは常に onStart() . なぜ onResume() が呼び出された後に onRestart()onCreate() を除いただけのメソッドです。 onStart() ? その目的は何ですか?

なぜ、私たちは onStart() . 私はまだ冗長だと考えています(おそらく、その意味を完全に理解していないため)。

どのように解決するのですか?

<ブロッククオート

onResume()はonStart()を除いたonRestart()とonCreate()メソッドの後に呼び出されるのではいけないのでしょうか。その目的は何ですか?

最初の回答がかなり長くなってしまったので、これ以上伸ばすのはやめて、こうしてみましょう。

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();
}

さて、それではまた長くなってしまいました(みなさん、ごめんなさい)。でも、これが私の説明です...

onResume() は、私が運転を開始したときと onPause() は一時停止するときです。つまり、運転中に赤信号になったので一時停止し、信号が青になったので再開する。また赤信号で一時停止し、青信号になったので再開する。このように onPause() -> onResume() -> onPause() -> onResume() ループはきついもので、私の旅では何度も発生します。

停止した状態から再スタート(旅を続けるための準備)し、再びスタートするループは、あまり一般的ではないかもしれません。あるケースでは、食料品店を発見して GroceryStoreActivity が開始されます(強制的に私の DriveToWorkActivity の地点まで onStop() ). 店から戻ると、私は onRestart()onStart() そして、旅を再開する。

にあるコードを onStart() の両方に onCreate()onRestart() をわざわざオーバーライドする必要はありません。 onStart() の間で行われる必要があります。 onCreate() -> onResume()onRestart() -> onResume() というように、重複していることが多いのです。

では、もう1度、再掲しますと...。

<ブロッククオート

onRestart()とonCreate()メソッドの後にonResume()が呼び出されるのは、onStart()を除いてはダメなのでしょうか?

をオーバーライドしない場合 onStart() となると、事実上このようなことになります。しかし onStart() メソッドの Activity が暗黙のうちに呼び出されるので、あなたのコードでの効果は実質的に onCreate() -> onResume() または onRestart() -> onResume() .