ActivityのonCreateで新しいActivityを起動したときのライフサイクル
5583 ワード
05-26 00:19:22.680 3114-3114/com.lv.lifecycledemo E/MainActivity: onCreate
05-26 00:19:22.690 3114-3114/com.lv.lifecycledemo E/MainActivity: onStart
05-26 00:19:22.690 3114-3114/com.lv.lifecycledemo E/MainActivity: onResume
05-26 00:19:22.690 3114-3114/com.lv.lifecycledemo E/MainActivity: onPause
05-26 00:19:22.740 3114-3114/com.lv.lifecycledemo E/SecondActivity: onCreate
05-26 00:19:22.740 3114-3114/com.lv.lifecycledemo E/SecondActivity: onStart
05-26 00:19:22.740 3114-3114/com.lv.lifecycledemo E/SecondActivity: onResume
05-26 00:19:22.860 3114-3114/com.lv.lifecycledemo E/MainActivity: onSaveInstanceState
05-26 00:19:22.860 3114-3114/com.lv.lifecycledemo E/MainActivity: onStop
最初のActivityのonCreate、onStart、onResumeを完全に完了すると、onResumeが実行された後、ユーザーと対話する必要がないことがわかります(onCreateで新しいActivityが起動されているため)、最初のActivityのonPauseメソッドが実行されます.このコードは、Activity Threadの
handleLaunchActivity
メソッドで見つけることができる.// ActivityThread
private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) {
...
Activity a = performLaunchActivity(r, customIntent);
if (a != null) {
...
handleResumeActivity(r.token, false, r.isForward,
!r.activity.mFinished && !r.startsNotResumed);
if (!r.activity.mFinished && r.startsNotResumed) {
try {
r.activity.mCalled = false;
mInstrumentation.callActivityOnPause(r.activity);
}
...
}
...
}
...
}
最初のActivityが一時停止すると、2番目のActivityのonCreate、onStart、onResumeが実行されます.このとき,2番目のActivityが1番目を完全に隠すと,1番目のActivityが見えなくなるため,1番目のActivityのonSaveInstanceStateとonStopメソッドが呼び出される.(最初のActivityが見えなくなってシステムに回収されやすくなったので、onSaveInstanceStateメソッドを呼び出します.)onSaveInstanceStateの呼び出しタイミングについて、Android公式ドキュメントにこんな言葉があります.
Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the instance is actually being destroyed by a user action (such as pressing the BACK key)
参考onSaveInstanceStateとonRestoreInstanceStateがトリガーされるタイミング