Activity如何缓存

来源:互联网 发布:洪恩软件开天辟地 编辑:程序博客网 时间:2024/06/05 11:02

     最近,看到一道面试题----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控件的状态, 成员变量的值等.