package com.example.screendemo;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("TAG", "MainActivity----onCreate");
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,Main2Activity.class));
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.i("TAG", "MainActivity----onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i("TAG", "MainActivity----onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i("TAG", "MainActivity----onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i("TAG", "MainActivity----onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("TAG", "MainActivity----onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("TAG", "MainActivity----onRestart");
}
}
启动Activity
MainActivity----onCreate
MainActivity----onStart
MainActivity----onResume
点击返回键
MainActivity----onPause
MainActivity----onStop
MainActivity----onDestroy
不设置Activity的android:configChanges时,切横屏时的生命周期
MainActivity----onPause
MainActivity----onStop
MainActivity----onDestroy
MainActivity----onCreate
MainActivity----onStart
MainActivity----onResume
切竖屏时的生命周期
MainActivity----onPause
MainActivity----onStop
MainActivity----onDestroy
MainActivity----onCreate
MainActivity----onStart
MainActivity----onResume
不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次
如果自己没有配置android:ConfigChanges,这时默认让系统处理,就会重建Activity,此时Activity的生命周期会走一遍。
通常情况下,当“屏幕方向”变化时会销毁并重建当前Activity。而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity:
<activity android:name="com.example.MainActivity"
android:configChanges="orientation" >
android:configChanges="orientation" 属性指定了要捕获“屏幕方向”变化这个行为,当捕行为发生后,会调用Activity的onConfigurationChanged()方法
不设置Activity的android:configChanges时,切横屏
MainActivity----onPause
MainActivity----onSaveInstanceState
MainActivity----onStop
MainActivity----onDestroy
MainActivity----onCreate
MainActivity----onStart
MainActivity----onRestoreInstanceState
MainActivity----onResume
点击Home键时
MainActivity----onPause
MainActivity----onSaveInstanceState
MainActivity----onStop
activity A中启动一个新的activity
MainActivity----onPause
MainActivity----onSaveInstanceState
MainActivity----onStop
onSaveInstanceState方法会在什么时候被执行?
1.当用户按下HOME键时
2.屏幕方向切换时,例如从竖屏切换到横屏时
3.从activity A中启动一个新的activity时。
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。