android 拍照 Activity 销毁

I_was_a_novice 2015-07-15 03:29:40
activity进入拍照,拍照后返回 activity,有时activity会被销毁,然后重新创建activity(原因:相机比较占用内存,后台的activity被kill了),activity页面的数据丢失。

在网上找的方法1
http://blog.sina.com.cn/s/blog_783ede0301014og5.html
试了下不好使,这个方法是针对横屏的

在网上找的方法2
onSaveInstanceState(Bundle outState)方法里面保存数据 ,
onRestoreInstanceState(Bundle savedInstanceState)恢复数据,
由于数据是class类型Bundle没法添加

方法3
建一个公共的类,里面用静态变量存储数据,比如activity销毁前将数据存到公共的类的静态变量里,从拍照返回activity重启时在重新加载公共类的静态变量数据,但是在activity销毁时,之前加进去的公共类静态变量数据也没了。(原因:activity被销毁,资源被释放,他所操作过的数据都不再存在了)

不知道有遇到这个问题的没有,怎么解决
...全文
635 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
afunx 2017-04-09
  • 打赏
  • 举报
回复
class实现Parcelable接口,这样Bundle就可以存储了
天色还不晚 2017-04-06
  • 打赏
  • 举报
回复
楼主,你好,请问你这个问题是在怎么解决的,指导一下
win-sun 2017-04-06
  • 打赏
  • 举报
回复
这个是做小米适配做的笔记: 小米系列的红米note1在使用拍照时候,容易出现杀死应用的情况 原因分析1:在占用内存较高情况下(目前测试推测在40M以上),使用相机系统有可能回收应用。相机返回后会创建应用,但是数据都将初始化(静态变量,全局,局部变量),并会尝试还原原有的堆栈的activity(栈顶?全部?) 说明:调用高清相机,应用被回收的几率相当高,几乎100%,HDR关闭也有几率应用会被回收。 解决方案: 方案一:应用回收后重新创建,做好恢复工作,可以当做崩溃再登录操作,静默回到刚才拍照的操作页面及页面展示 方案二:自定义相机拍摄,处理等。
win-sun 2017-04-06
  • 打赏
  • 举报
回复
我遇到是低端手机适配会出现这种问题,不过没有好的解决方案,无法避免Activity 销毁,只能自动重启应用,还原数据展示,数据存储可以用SharedPreferences或者数据库,我测试过微信,QQ都是重新打开的。
Perfect411_111 2015-10-31
  • 打赏
  • 举报
回复
这种问题一般除了修改系统的阈值外,就是提高activity的oom的优先级,试下能否给此activity绑定一个空service,提高优先级
yunmenggyy 2015-10-28
  • 打赏
  • 举报
回复
引用 楼主 liangtianheng 的回复:
activity进入拍照,拍照后返回 activity,有时activity会被销毁,然后重新创建activity(原因:相机比较占用内存,后台的activity被kill了),activity页面的数据丢失。 在网上找的方法1: http://blog.sina.com.cn/s/blog_783ede0301014og5.html 试了下不好使,这个方法是针对横屏的 在网上找的方法2: onSaveInstanceState(Bundle outState)方法里面保存数据 , onRestoreInstanceState(Bundle savedInstanceState)恢复数据, 由于数据是class类型Bundle没法添加 方法3: 建一个公共的类,里面用静态变量存储数据,比如activity销毁前将数据存到公共的类的静态变量里,从拍照返回activity重启时在重新加载公共类的静态变量数据,但是在activity销毁时,之前加进去的公共类静态变量数据也没了。(原因:activity被销毁,资源被释放,他所操作过的数据都不再存在了) 不知道有遇到这个问题的没有,怎么解决
你说的被销毁的现象我还真没遇到,拍完照以后返回的是一个URI,你通过URI加载这个图片应该不会内存溢出,假设真的存在这个现象,那你不管用什么变量保存都不行,你得取样。
qsmaxmin 2015-10-28
  • 打赏
  • 举报
回复
直接保存到Application中的全局变量
Arnold9009 2015-07-16
  • 打赏
  • 举报
回复
几种方法组合起来用吧 onSaveInstanceState保存activity的信息,class的个性化数据通过其他存储方式保存,如sqlite、sharedpreference等
mmorss 2015-07-16
  • 打赏
  • 举报
回复
<application android:largeHeap="true" ... </application> 这允许你的应用使用更多的heap,可以用ActivityManager. http://blog.csdn.net/chengyingzhilian/article/details/8662849 http://hilary3113.iteye.com/blog/1766856
I_was_a_novice 2015-07-16
  • 打赏
  • 举报
回复
没有更好的方法么
mingxuan3000 2015-07-15
  • 打赏
  • 举报
回复
方案3 就搞个数据库表格来存储 或别的存储方案来存储

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧