Activity(活动)生命周期--系统回收活动数据存储

Posted sky七月凉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity(活动)生命周期--系统回收活动数据存储相关的知识,希望对你有一定的参考价值。

当一个活动进入停止状态的时候,是有可能被系统回收的。那如果处于停止状态的活动被系统回收了,而它上面却有我们所需要数据该如何保存呢?(类似于:打开qq进入下一个界面没有进去,返回的时候仍然不需要你输入账户名和密码)Activity类中提供了onSaveInstanceState()回调方法,这个方法可以保证活动在被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一些列的方法用于保存数据,比如可以使用putString()方法保存整型数据,由此类推。每个保存方法需要传入2个参数,第一个参数是键,用于从后面的Bundle中取值,第二个参数则是真正要保存的内容。

以Activitylifetest项目为例:
在MainActivity中添加如下代码就可以就可以将临时数据进行保存.

  1. @Override
  2. protected void onSaveInstanceState(Bundle outState) {
  3. super.onSaveInstanceState(outState);
  4. String tempData = "Somthing you jiut typed";
  5. outState.putString("data_key", tempData);
  6. }

数据是已经保存下来的,那么我们该如何恢复呢?修改MainActivity中的onCrate()方法

  1. @Override
  2. protected void omCreate(Bundle savedInstanceState){
  3. super.onCreate(savedInstanceState);
  4. Log.d(TAG,"onCreate");
  5. setContentView(R.layout.activity_activitylifetest);
  6. if(savedInstanceState !=null){
  7. String tempData=savedInstanceState.getString("data_key");
  8. Log.d(TAG,tempData);
  9. }
  10. }

取出值之后再做相应的操作恢复就可以了,比如说将文本内容重新赋值到文本输入框中。
备注:Intent还可以结合Bundle一起用于传递数据,首先可以把需要传递的数据都保存到bundle对象中,然后将bundle对象存放在Intent里。到了目标活动之后先从Intent中取出Bundle,然后再从Bundle中取出数据





以上是关于Activity(活动)生命周期--系统回收活动数据存储的主要内容,如果未能解决你的问题,请参考以下文章

Activity和Fragment周期介绍

Android中,activity生命周期是指啥?

Activity的生命周期

Android笔记-活动生命周期&Bundle回收临时数据&活动启动模式&常用技巧

Android-1Activity生命周期

android的生命周期