Android手机拍照APP闪退问题及应对措施
近日,在APP上进行手机拍照,发现很奇怪的问题:就是在进行拍照的时候,APP会闪退,然后功能不正常;而且,闪退是非必现的——也就是多次操作肯定会出现,但并不能确定出现的时间和原因。
当时,找了各种原因,刚开始都以为是自己程序写的有问题,但由于是非必现,就可以基本上认为该结论不成立。又怀疑是高德地图的问题,但更换高德地图的SDK以后,发现问题依然存在。
在随后的几天里,进行了多次试验和相关资料搜索,最终确定是拍照过程中造成的。并有如下基本资料:部分Android机型,如oppo(鄙人的手机不幸就是oppo)、小米和三星,会在拍照时,当认为有必要时,会对Activity进行优化;优化时,会把相关Activity变量释放掉(造成闪退);当重新加载以后,该Activity里除视图相关的变量,临时变量全会置为null。
在这种情况下,就会出现APP闪退和相关Activity的功能不正常。
值得注意的是,该优化并不一定在所有机型中实现(可能其他机型也有优化,但可能优化方式和规则可能不一致)。而且,该优化对于APP工程师来说,是不可确定的。
可以实现的解决方案是:在onSaveInstanceState对临时变量进行保存;当APP闪退以后,可以在onRestoreInstanceState对临时变量进行恢复,从而保证APP的变量功能正常。
相关样例如下:
public class TestActivity extends BaseActivity {private string mFilePath; //拍照文件返回路径,作为临时保存路径样例//其他与视图相关的操作函数@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("mFilePath", mFilePath); //保存,方便文件恢复时使用Log.d(TAG, "onSaveInstanceState");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);保存,方便文件恢复时使用if (TextUtils.isEmpty(mFilePath)) {mFilePath= savedInstanceState.getString("mFilePath");}Log.d(TAG, "onRestoreInstanceState");}//可能的拍照过程
}
通过该解决方案,APP依然会在拍照后闪退(因为闪退来自Android内部,对APP工程师来说是不可控的),但由于有临时变量保存和恢复,对于APP使用者来说,最多再次拍照即可,并不影响其太多的使用。该方案得到解决。
参考文献:
[1]https://github.com/D-clock/AndroidStudyCode/blob/master/notes/%E4%BD%A0%E9%9C%80%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84Android%E6%8B%8D%E7%85%A7%E9%80%82%E9%85%8D%E9%97%AE%E9%A2%98.md
[2]android系统相机的使用、及解决拍照闪退的问题_天天就是搬砖的博客-程序员宅基地 - 程序员宅基地
[3]Android拍照与相机适配问题汇总 - 简书
Android手机拍照APP闪退问题及应对措施相关推荐
- Android手机中APP闪退的原因汇总
在日常生活中,经常点击手机应用程序时,一下就闪退了,到底有哪些原因造成,让我们来一起总结下: 可能是网络异常引起的 手机空间不足造成的 APP程序的版本太老引起的,直接卸载老版本,重装安装就正常了.这 ...
- android 6.1 app闪退,手机软件闪退怎么办 具体解决方法【图文】
智能手机已经成为我们日常生活不可或缺的一部分,上网冲浪.手机游戏.微信聊天等等俨然已经是我们工作之余的娱乐内容之一.软件功能的强大的同时也要求手机自身系统配置需同步提高,这样才能使手机对各类软件的兼容 ...
- android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
android9系统android studio项目改成用android.mk编译v7包--APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.Pat ...
- 记一次使用android studio分析app闪退原因的过程
闪退演示 首页和问题反馈重复切换两次就闪退 (因为是公司内部app,原有视频不做展示) app架构 app是原生android studio开发的,部分页面是h5开发的,通过WebView和addJa ...
- Android Studio出现APP闪退问题(My Application keeps stopping)
1.问题的截图 下方还会报错:An unexpected packet was received before the handshake 2.解决方法 我重新看来一下自己的代码,发现activity ...
- Android 页面跳转时发生双击导致app闪退的解决方案
在页面跳转时双击双击,查阅了各种资料 尝试一:从双击事件出发,避免双击事件 例如重写onClick事件 public abstract class NoDoubleClickListener impl ...
- 抓取android系统日志_记录一次定位app闪退故障
在测试android客户端兼容性时,发现app闪退,上海的小伙伴需要闪退时的系统日志:故把快生锈的adb知识拿出来show一把: 1.下载adb工具包(adb的全称为Android Debug Bri ...
- Android Studio 打开Profiler后App闪退
Android Studio 打开Profiler后App闪退 环境 Android Studio 4.1.1 Android 10 错误信息: 2020-12-24 16:06:21.870 300 ...
- 大疆无人机android登录闪退,你的DJI APP闪退了吗?附官方解决方案
原标题:你的DJI APP闪退了吗?附官方解决方案 今天,很多飞友反应,在使用大疆无人机过程中出现DJI APP闪退情况.随后在大疆社区官方给出了解决方案,如下: 关于DJI GO 4 APP闪退解决 ...
最新文章
- 转 PHP编程过程中需要了解的this,self,parent的区别
- 保护隐私的 Structure-from-Motion (SfM)
- jmeter mysql plugin_jmeter连接mysql遇到的问题
- 组件通信 eventtBus
- 数组名的地址,和数组名取地址的讨论
- Cisco SSL ×××
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- python 切片函数,python切片详解
- Manjaro启动项目及服务配置备忘
- Android ListView下拉刷新点击加载更多
- 浅谈-61850-1
- Quartus ii安装及使用实验报告
- 智能硬件再下一城:家居
- matlab 发音,MATLAB,MATLAB language,音标,读音,翻译,英文例句,英语词典
- firefox的about:config说明及配置
- 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)java
- iOS: 设置背景颜色为渐变
- c#接口是什么,为什么要用接口
- 厦门考计算机竞赛保送北大清华名单,五大学科竞赛获奖名单公布 厦门两名学生保送清华北大...
- 一个所谓的“文字创作者”的焦虑