Activity的onCreate中启动新的Activity时生命周期

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方法。这段代码可以在ActivityThread的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暂停之后,就会执行第二个Activity的onCreate、onStart和onResume。这个时候,如果第二个Activity完全遮住了第一个,就会导致第一个Activity不可见,所以会接着调用第一个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触发的时机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值