近日,在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闪退问题及应对措施相关推荐

  1. Android手机中APP闪退的原因汇总

    在日常生活中,经常点击手机应用程序时,一下就闪退了,到底有哪些原因造成,让我们来一起总结下: 可能是网络异常引起的 手机空间不足造成的 APP程序的版本太老引起的,直接卸载老版本,重装安装就正常了.这 ...

  2. android 6.1 app闪退,手机软件闪退怎么办 具体解决方法【图文】

    智能手机已经成为我们日常生活不可或缺的一部分,上网冲浪.手机游戏.微信聊天等等俨然已经是我们工作之余的娱乐内容之一.软件功能的强大的同时也要求手机自身系统配置需同步提高,这样才能使手机对各类软件的兼容 ...

  3. android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

    android9系统android studio项目改成用android.mk编译v7包--APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.Pat ...

  4. 记一次使用android studio分析app闪退原因的过程

    闪退演示 首页和问题反馈重复切换两次就闪退 (因为是公司内部app,原有视频不做展示) app架构 app是原生android studio开发的,部分页面是h5开发的,通过WebView和addJa ...

  5. Android Studio出现APP闪退问题(My Application keeps stopping)

    1.问题的截图 下方还会报错:An unexpected packet was received before the handshake 2.解决方法 我重新看来一下自己的代码,发现activity ...

  6. Android 页面跳转时发生双击导致app闪退的解决方案

    在页面跳转时双击双击,查阅了各种资料 尝试一:从双击事件出发,避免双击事件 例如重写onClick事件 public abstract class NoDoubleClickListener impl ...

  7. 抓取android系统日志_记录一次定位app闪退故障

    在测试android客户端兼容性时,发现app闪退,上海的小伙伴需要闪退时的系统日志:故把快生锈的adb知识拿出来show一把: 1.下载adb工具包(adb的全称为Android Debug Bri ...

  8. Android Studio 打开Profiler后App闪退

    Android Studio 打开Profiler后App闪退 环境 Android Studio 4.1.1 Android 10 错误信息: 2020-12-24 16:06:21.870 300 ...

  9. 大疆无人机android登录闪退,你的DJI APP闪退了吗?附官方解决方案

    原标题:你的DJI APP闪退了吗?附官方解决方案 今天,很多飞友反应,在使用大疆无人机过程中出现DJI APP闪退情况.随后在大疆社区官方给出了解决方案,如下: 关于DJI GO 4 APP闪退解决 ...

最新文章

  1. 转 PHP编程过程中需要了解的this,self,parent的区别
  2. 保护隐私的 Structure-from-Motion (SfM)
  3. jmeter mysql plugin_jmeter连接mysql遇到的问题
  4. 组件通信 eventtBus
  5. 数组名的地址,和数组名取地址的讨论
  6. Cisco SSL ×××
  7. 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
  8. python 切片函数,python切片详解
  9. Manjaro启动项目及服务配置备忘
  10. Android ListView下拉刷新点击加载更多
  11. 浅谈-61850-1
  12. Quartus ii安装及使用实验报告
  13. 智能硬件再下一城:家居
  14. matlab 发音,MATLAB,MATLAB language,音标,读音,翻译,英文例句,英语词典
  15. firefox的about:config说明及配置
  16. 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)java
  17. iOS: 设置背景颜色为渐变
  18. c#接口是什么,为什么要用接口
  19. 厦门考计算机竞赛保送北大清华名单,五大学科竞赛获奖名单公布 厦门两名学生保送清华北大...
  20. 一个所谓的“文字创作者”的焦虑

热门文章

  1. html代码圣诞贺卡图片,自制圣诞贺卡图片大全
  2. nginx 反向代理及负载均衡策略
  3. uni-app小程序
  4. SparkSession简单介绍
  5. PMP 考试一定要报培训班吗?
  6. 通过NFS(nfsroot)启动linux系统
  7. 中国天气网天气预报API接口城市代码,XML格式,数据具体到县、区级别
  8. FFmpeg源码分析:avcodec_register_all()注册编解码器
  9. Android Weekly - 42 : 打铁还需自身硬
  10. odoo12 数据文件翻译