Activity生命周期详解(一)单个activity

一、自然情况下activity生命周期

public class MainActivity extends AppCompatActivity {
    private final String KEY="state change 111";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("MainActivity", "01----onCreate()");
        if (savedInstanceState != null) {
            Log.e("MainActivity", "01----onCreate()=savedInstanceState" + savedInstanceState.toString());
            Log.e("MainActivity", "01----onCreate()" + savedInstanceState.get(KEY));
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("MainActivity", "02----onStart");

    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("MainActivity", "03----onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("MainActivity", "04---onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("MainActivity", "05---onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("MainActivity", "06----onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("MainActivity", "07----onRestart");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putString(KEY, KEY);
        super.onSaveInstanceState(outState);
        Log.e("MainActivity", "111111----onSaveInstanceState(Bundle outState)---outState=" + outState.toString());
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        Log.e("MainActivity", "2222222222----onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState!=null){
            Log.e("MainActivity", "333333333----onRestoreInstanceState()---savedInstanceState=" + savedInstanceState.toString());
            Log.e("MainActivity", "333333333----onRestoreInstanceState()---value=" + savedInstanceState.get(KEY));
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.e("MainActivity", "4444444444----onNewIntent()");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.e("MainActivity", "5555555----onConfigurationChanged(Configuration newConfig)---newConfig=" + newConfig.toString());
    }
}

1. 第一次启动

MainActivity: 01----onCreate()
MainActivity: 02----onStart
MainActivity: 03----onResume

2. 按返回键退出程序

MainActivity: 04---onPause
MainActivity: 05---onStop
MainActivity: 06----onDestroy

3. 重新进入程序,按home键返回桌面

MainActivity: 04---onPause

MainActivity: 111111----onSaveInstanceState(Bundle outState)---outState=Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@f2e341e, 2131558502=android.view.AbsSavedState$1@f2e341e, 2131558503=android.view.AbsSavedState$1@f2e341e}}], state change 111=state change 111}]

MainActivity: 05---onStop

4. home键返回桌面后,重新打开程序

MainActivity: 07----onRestart
MainActivity: 02----onStart
MainActivity: 03----onResume

5. 打开程序,横竖屏切换

MainActivity: 04---onPause
MainActivity: 111111----onSaveInstanceState(Bundle outState)---outState=Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@f2e341e, 2131558502=android.view.AbsSavedState$1@f2e341e, 2131558503=android.view.AbsSavedState$1@f2e341e}}], state change 111=state change 111}]

MainActivity: 05---onStop
MainActivity: 06----onDestroy


MainActivity: 01----onCreate()
MainActivity: 01----onCreate()=savedInstanceStateBundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@f2e341e, 2131558502=android.view.AbsSavedState$1@f2e341e, 2131558503=android.view.AbsSavedState$1@f2e341e}}], state change 111=state change 111}]
MainActivity: 01----onCreate()state change 111

MainActivity: 02----onStart

MainActivity: 333333333----onRestoreInstanceState()---savedInstanceState=Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@f2e341e, 2131558502=android.view.AbsSavedState$1@f2e341e, 2131558503=android.view.AbsSavedState$1@f2e341e}}], state change 111=state change 111}]
MainActivity: 333333333----onRestoreInstanceState()---value=state change 111

MainActivity: 03----onResume

6. home返回桌面,后台杀死程序。

06----onDestroy

7.后台杀死程序后,重新打开程序

MainActivity: 01----onCreate()
MainActivity: 02----onStart
MainActivity: 03----onResume

二、设置configChanges

在AndroidManifest中的MainActivity添加configChanges属性

android:configChanges="keyboardHidden|orientation|screenSize"

如下

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:configChanges="keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SecondActivity"></activity>

1. 第一次启动

MainActivity: 01----onCreate()
MainActivity: 02----onStart
MainActivity: 03----onResume

2. 按返回键退出程序

MainActivity: 04---onPause
MainActivity: 05---onStop
MainActivity: 06----onDestroy

3. 重新进入程序,按home键返回桌面

MainActivity: 04---onPause

MainActivity: 111111----onSaveInstanceState(Bundle outState)---outState=Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@f2e341e, 2131558502=android.view.AbsSavedState$1@f2e341e, 2131558503=android.view.AbsSavedState$1@f2e341e}}], state change 111=state change 111}]

MainActivity: 05---onStop

4. home键返回桌面后,重新打开程序

MainActivity: 07----onRestart
MainActivity: 02----onStart
MainActivity: 03----onResume

5. 打开程序,横竖屏切换

MainActivity: 5555555----onConfigurationChanged(Configuration newConfig)---newConfig={0 1.0 ?mcc?mnc en_US ldltr sw360dp w640dp h335dp 640dpi nrml long land finger -keyb/v/h -nav/h s.70}

三、总结

设置configChange属性后只有在横竖屏切换时生命周期会发生变化。因为不会销毁并重新创建该Activity。而是调用onConfigurationChanged()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值