【每日一剂】---onSaveInstanceState()保存临时数据
2015-12-30 21:03
351 查看
Activity 提供了一个onSaveInstanceState()回调方法,这个方法会保证一定在活动被回收前调用 ,因此可以用这个方法解决活动被回收时临时数据得不到保存的问题。
onSaveInstanceState()方法会携带一个 Bundle 类型的参数,Bundle 提供了一系列的方法用于保存数据,比如可以使用 putString()方法保存字符串,使用 putInt()方法保存整型数据, 以此类推。每个保存方法需要传入两个参数,第一个参数是键,用于后面从 Bundle 中取值, 第二个参数是真正要保存的内容。
在 MainActivity 中添加如下代码就可以将临时数据进行保存:
数据是已经保存下来了,那么我们应该在哪里进行恢复呢?细心的你也许早就发现,我 们一直使用的 onCreate()方法其实也有一个 Bundle 类型的参数。这个参数在一般情况下都是 null,但是当活动被系统回收之前有通过 onSaveInstanceState()方法来保存数据的话,这个参 数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法将数据取出即可。
修改 MainActivity 的 onCreate()方法,如下所示:
取出值之后再做相应的恢复操作就可以了,比如说将文本内容重新赋值到文本输入框 上,这里我们只是简单地打印一下。
不知道你有没有察觉,使用 Bundle 来保存和取出数据是不是有些似曾相识呢?没错! 我们在使用 Intent 传递数据时也是用的类似的方法。这里跟你提醒一点,Intent 还可以结合 Bundle 一起用于传递数据的,首先可以把需要传递的数据都保存在 Bundle 对象中,然后再将 Bundle 对象存放在 Intent 里。到了目标活动之后先从Intent 中取出 Bundle,再从 Bundle 中一一取出数据。具体的代码我就不写了,要学会举一反三哦。
onSaveInstanceState()方法会携带一个 Bundle 类型的参数,Bundle 提供了一系列的方法用于保存数据,比如可以使用 putString()方法保存字符串,使用 putInt()方法保存整型数据, 以此类推。每个保存方法需要传入两个参数,第一个参数是键,用于后面从 Bundle 中取值, 第二个参数是真正要保存的内容。
在 MainActivity 中添加如下代码就可以将临时数据进行保存:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); String tempData = "Something you just typed"; outState.putString("data_key", tempData); }
数据是已经保存下来了,那么我们应该在哪里进行恢复呢?细心的你也许早就发现,我 们一直使用的 onCreate()方法其实也有一个 Bundle 类型的参数。这个参数在一般情况下都是 null,但是当活动被系统回收之前有通过 onSaveInstanceState()方法来保存数据的话,这个参 数就会带有之前所保存的全部数据,我们只需要再通过相应的取值方法将数据取出即可。
修改 MainActivity 的 onCreate()方法,如下所示:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate"); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); if (savedInstanceState != null) { String tempData = savedInstanceState.getString("data_key"); Log.d(TAG, tempData); } ...... }
取出值之后再做相应的恢复操作就可以了,比如说将文本内容重新赋值到文本输入框 上,这里我们只是简单地打印一下。
不知道你有没有察觉,使用 Bundle 来保存和取出数据是不是有些似曾相识呢?没错! 我们在使用 Intent 传递数据时也是用的类似的方法。这里跟你提醒一点,Intent 还可以结合 Bundle 一起用于传递数据的,首先可以把需要传递的数据都保存在 Bundle 对象中,然后再将 Bundle 对象存放在 Intent 里。到了目标活动之后先从Intent 中取出 Bundle,再从 Bundle 中一一取出数据。具体的代码我就不写了,要学会举一反三哦。
相关文章推荐
- 如何改变<input type=”text" >输入框内的值
- HDU 2019
- 大数据成长历程
- 使用fstream输出数据到.txt文件
- 12月30号 iOS程序准备
- 读取注册表hive文件
- 深入分析JavaWeb Item40 -- 文件上传和下载
- linux下串口调试工具/串口终端推荐: picocom
- mac 中npm安装模块去除sudo
- C语言的判断语句
- [nginx+tomcat的负载均衡搭建] This system is not registered with RHN
- Brocade SAN Switch CFG backup and recover
- Codeforce 题目479E Riding in a Lift(DP)
- Java中的String为什么是不可变的? -- String源码分析
- 你还不知道?这四个因素决定了你的养老金待遇!
- .NET MVC 4 实现邮箱激活账户功能
- 总结一下,以软件开发生命周期来说明不同的测试的使用情况
- 前端双引号单引号,正则反向引用,js比较jq
- BZOJ4372: 烁烁的游戏
- 玩转回文