Dlaczego nie może tak być, że onResume () jest wywoływana po metodach onRestart () i onCreate () po prostu wykluczając onStart ()? Jaki jest jej cel?
OK, ponieważ moja pierwsza odpowiedź była dość długa, nie będę jej dalej rozciągać, więc spróbujmy tego ...
public DriveToWorkActivity extends Activity
implements onReachedGroceryStoreListener {
}
public GroceryStoreActivity extends Activity {}
UWAGA: celowo pominąłem wezwania do takich rzeczy, jak super.onCreate(...)itp. To jest pseudokod, więc daj mi tutaj trochę artystycznej licencji. ;)
Metody DriveToWorkActivitynaśladowania ...
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, więc to kolejny długi (przepraszam ludzie). Ale oto moje wyjaśnienie ...
onResume()jest wtedy, gdy zaczynam jechać i onPause()chwilowo zatrzymuję się. Więc jadę, a potem docieram do czerwonego światła, więc zatrzymuję się ... światło zmienia się na zielone i wznawiam. Kolejne czerwone światło i zatrzymuję się, a potem zielone, więc wznawiam. onPause() -> onResume() -> onPause() -> onResume()Pętla jest ciasno jeden i pojawia się wiele razy przez moją podróż.
Pętla od zatrzymania z powrotem przez restart (przygotowanie do kontynuowania mojej podróży) do ponownego uruchomienia jest prawdopodobnie mniej powszechna. W jednym przypadku zauważam Sklep Spożywczy i GroceryStoreActivityzaczyna się (zmuszając mnie DriveToWorkActivitydo rzeczy onStop()). Kiedy wracam ze sklepu, przechodzę przez niego onRestart()i onStart()wznawiam swoją podróż.
Mógłbym umieścić kod, który jest w onStart()obu onCreate()i onRestart()nie zawracać sobie głowy nadpisywaniem onStart()w ogóle, ale im więcej trzeba zrobić między onCreate() -> onResume()i onRestart() -> onResume(), tym więcej rzeczy powielam.
Tak więc, aby ponownie zareagować ...
Dlaczego nie może tak być, że onResume () jest wywoływana po metodach onRestart () i onCreate () po prostu wykluczając onStart ()?
Jeśli tego nie zrobisz, onStart()tak się stanie. Chociaż onStart()metoda Activitywill zostanie wywołana niejawnie, efekt w kodzie jest efektywny onCreate() -> onResume()lub onRestart() -> onResume().