最近,看到一道面试题----Activity如何缓存,随手来记录一下,因为基础不熟有时很尴尬。这个通常是在横竖屏切换时,主要和一些生命周期方法有关,简单写代码验证一下。如下:
MainActivity中的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("aaa----1---->>>onCreate ");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("aaa----2---->>>onSaveInstanceState ");
}
@Override
protected void onStart() {
super.onStart();
System.out.println("aaa----3---->>>onStart ");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("aaa----4---->>>onResume ");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("aaa----5---->>>onPause ");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("aaa----6---->>>onStop ");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("aaa----7---->>>onRestoreInstanceState ");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("aaa----8---->>>onRestart ");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("aaa----9---->>>onDestroy ");
}
}
运行结果:
竖屏变横屏时:在onStop之前会调用onSaveInstanceState()保存数据在重建Activity之后,会在onStart()之后调用onRestoreInstanceState(),
并把保存下来的Bundle传给onCreate()和它会默认重建Activity当前的视图,我们可以在onCreate()中,恢复自己的数据。
网上普遍认为, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户
显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用. 并且由于onSaveInstanceState()方法方法
不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等.保存持久化数据的操作应该放在onPause()中. onSaveInstanceState()方
法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等.