<Android>在Activity被非正常杀死并重建时,使用savedInstanceState进行数据恢复的简单实例
2015-06-17 23:34
766 查看
转载请标明出处:/article/9569747.html
需求:
最近在折腾一个需求,功能可以理解为类似微信朋友圈的编辑界面:用户可以在编辑的时候插入图片,图片数量暂时未定上限。用户可以点击任意一张图片,跳转进入图片浏览界面(另一个Activity)查看大图,左右滑动切换图片。
问题:
当插入的图片数量过多时, 打开图片浏览时, 不断循环滑动切换图片,有概率出现程序内存溢出崩溃(OOM)。这个时候点击确定dismiss掉崩溃对话框时,可以看到从浏览图片界面回到了编辑界面,刚刚还有的图片列表,现在一片空白。
分析:
通过 打印日志,看到在程序崩溃之后, 编辑界面的Activity又执行了一边onCreate。看来是因为内存不足, 编辑界面被系统杀掉,然后又重建了。
解决:
面对类似这种因为内存不足而被系统杀死的非正常“死亡”方式, Activity会调用回调函数onSaveInstanceState(Bundle outState)。在这里可以将数据存入outState。之后Activity重建, 调用onCreate时,该Bundle 对象会被作为参数传入,这时可以将保存的值取出。本例中,丢失的数据是图片本地路径列表,导致重建之后展示小图图片的GridView没有数据,所以对该数据进行保存与恢复即可。
代码:
1、在onSaveInstanceState中保存数据:
2、在onCreate中恢复:
结果:
当浏览图片大图崩溃后,重新回到编辑界面, 可以看到小图列表存在,较之前没有变化, 再次点击小图,可以重新进行图片浏览。问题解决。
需求:
最近在折腾一个需求,功能可以理解为类似微信朋友圈的编辑界面:用户可以在编辑的时候插入图片,图片数量暂时未定上限。用户可以点击任意一张图片,跳转进入图片浏览界面(另一个Activity)查看大图,左右滑动切换图片。
问题:
当插入的图片数量过多时, 打开图片浏览时, 不断循环滑动切换图片,有概率出现程序内存溢出崩溃(OOM)。这个时候点击确定dismiss掉崩溃对话框时,可以看到从浏览图片界面回到了编辑界面,刚刚还有的图片列表,现在一片空白。
分析:
通过 打印日志,看到在程序崩溃之后, 编辑界面的Activity又执行了一边onCreate。看来是因为内存不足, 编辑界面被系统杀掉,然后又重建了。
解决:
面对类似这种因为内存不足而被系统杀死的非正常“死亡”方式, Activity会调用回调函数onSaveInstanceState(Bundle outState)。在这里可以将数据存入outState。之后Activity重建, 调用onCreate时,该Bundle 对象会被作为参数传入,这时可以将保存的值取出。本例中,丢失的数据是图片本地路径列表,导致重建之后展示小图图片的GridView没有数据,所以对该数据进行保存与恢复即可。
代码:
1、在onSaveInstanceState中保存数据:
@Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); outState.putStringArrayList("photos", (ArrayList<String>) photos); }
2、在onCreate中恢复:
if(null != savedInstanceState) { photos = savedInstanceState.getStringArrayList("photos"); } else { photos = new ArrayList<String>(); }
结果:
当浏览图片大图崩溃后,重新回到编辑界面, 可以看到小图列表存在,较之前没有变化, 再次点击小图,可以重新进行图片浏览。问题解决。
相关文章推荐
- Android实现简单计算器功能(Button控件实现)
- Android基础教程之简单的Button事件响应综合提示控件Toast的应用
- 极力推荐 自学视频java、php、python、android!
- android 倒计时
- Android四大组件之Activity
- QT For Android 修改中文名称
- Android GridView 实现九宫格效果(小恩爱首页效果)
- Android学习第一课:自定义日志LogCat输出
- Android中Adapter之SimpleCursorAdapter使用
- android学习笔记一 ---- android-sdk基础介绍
- Android开源项目PagerSlidingTabStrip
- android ctrl +鼠标左键直接打开xml文件
- Android中Cursor类的概念和用法
- Android使用百度定位API时获取的地址信息为null
- 使用 Fragment 实现底部导航
- Android 获取设备信息、获取手机信息
- 记录Android学习笔记和部分IOS收藏
- 菜鸟学Android笔记(三十七):cookies入门
- Android cpu 使用率控件(浮动窗口)附源码
- Android开机广播android.intent.action.BOOT_COMPLETED