Activity被系统杀死,数据的存储与恢复

1、保存数据的方法:onSaveInstanceState(Bundle outState)

触发条件:Activity未执行finish,比如按了home键,电源键,旋转Activity,内存不足等。这种数据保存都是临时的。如果想保存一些持久数据,用onPause


2、恢复数据的方法:onRestoreInstanceState(BundlesavedInstanceState)

触发条件:onSaveInstanceState已经触发,Activity被系统回收之后,再次打开。


3、恢复数据的方法:Create(Bundle savedInstanceState)

触发条件:创建Activity实例的时候


4、接下来,Activity里面,实践一下:

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("test","test数据");
        Log.e("存储临时数据:","test数据");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String test = savedInstanceState.getString("test");
        Log.e("恢复临时数据:",test);
    }
按HOME键,触发onSaveInstanceState,程序回到后台,等系统把Activity回收,再次打开,触发onRestoreInstanceState。

注意:如果想快速让系统回收Activity,打开手机设置,开发人员选项,开启不保留活动。

这样,用户按了Home键,系统就会回收Activity了。


5、同理Fragment里面

@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
    }
只是恢复数据的方法名变了。

再说一遍,只适合保存临时数据,不能存持续化数据,否则数据可能会丢失,被系统回收。




猜你喜欢

转载自blog.csdn.net/qq_29266921/article/details/76046447