一、自然情况下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()方法。