小编典典

onStart() 和 onResume() 的区别

all

我无法理解onStart()过渡状态的含义。该onResume()方法总是在
之后调用onStart()。为什么不能onResume()是之后调用的方法onRestart()onCreate()方法只是排除onStart()?它的目的是什么?

为什么我们不能没有onStart(). 我仍然认为它是多余的(可能是因为不完全理解它的含义)。


阅读 108

收藏
2022-07-27

共1个答案

小编典典

为什么不能在 onRestart() 和 onCreate() 方法之后调用 onResume(),只排除 onStart()?它的目的是什么?

好的,因为我的第一个答案很长,我不会进一步扩展它,所以让我们试试这个......

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()并且根本不需要覆盖,但是在andonStart()之间需要做的越多,我复制的东西就越多。onCreate() -> onResume()``onRestart() -> onResume()

所以,再次引用…

为什么不能在 onRestart() 和 onCreate() 方法之后调用 onResume(),只排除 onStart()?

如果您不覆盖onStart(),那么这实际上就是发生的事情。虽然
onStart()方法Activity将被隐式调用,但您的代码中的效果实际上是onCreate() -> onResume()or
onRestart() -> onResume()

2022-07-27