zoukankan      html  css  js  c++  java
  • 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中取出数据





  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/aqyl/p/6606794.html
Copyright © 2011-2022 走看看