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

来源:互联网 发布:mac三指拖动 编辑:程序博客网 时间:2024/05/21 08:57

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);    }
只是恢复数据的方法名变了。

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