关于H5在部分安卓手机上调用摄像头拍照后浏览器自动刷新,无法上传图片的解释

这个问题具体表现为在移动端浏览器上或android的webview上打开某个网页 调用摄像头拍照后,无法实现图片上传,浏览器会自动刷新;这一问题无法100%重现,但概率不低:

在如红米等低端安卓机上发生的概率会比较高。

用微信打开的网页出现这种情况的概率更大;

跟调取系统相册相比,调用摄像头拍照出现这种情况的概率更大;

这个问题的原因主要是由于android底层设计缺陷引起的,让我们看看这一行为过程到底发生了些什么:

1.当用户从浏览器调用摄像头时,Android系统会把系统进程从浏览器切换到摄像头(或者相册),这个时候浏览器进程变成了后台进程;

2.由于Android操作系统的设计缺陷,此时浏览器进程的留存优先级(不被系统kill掉的优先级)与所有其它的后台进程是一样的,因此如果操作系统认为内存不足需要进行清理,此时浏览器进程将不会得到任何保护 -- 很不幸,因为浏览器占用内存一般都比较大,所以这次kill操作很容易kill掉浏览器进程;

3.当用户选择好图片返回浏览器时,浏览器进程已经不复存在了,按照Android的机制,浏览器进程将进行恢复,试图恢复到kill之前的状态 -- 很不幸,恢复到什么状态是由浏览器来决定的,而浏览器不可能100%恢复到选择文件之前的那个状态。因此最终用户所看到的现象就是:选择文件完成后,浏览器刷新了一下,而刷新到什么状态由浏览器决定。

对于这一问题,Android技术团队的态度是回避(将bug标记为obsolete) -- 可能是因为此bug涉及了OS底层进程切换的机制,修复起来风险太高;而随着手机设备内存容量的增大,这一问题所发生的概率会越来越小。

理解了问题的原因,对问题的一些表征也就有了合理的解释:低端安卓机的内存更小,因此发生问题的频率更高;而与选择本地图片相比,调取系统摄像头所耗的内存更大(当拍摄有大量文字的图片时尤其如此),因此调取摄像头时问题发生的更加频繁;当用户已经开了很多别的App时,问题发生的概率更大。

感谢chuan chao‘s 分享

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,490评论 25 709
  • 所有的感受就想一条河流,如果我们压抑感受就像在河流中筑堤截流,就会出现抑郁。必须让所有的感受流动起来,流经我们...
    誼君阅读 1,526评论 0 0
  • 一、前言 有句话是这么说的,程序员对工作是时刻准备着的。无论你是长假还是短假,只要有网,你就躲不开客户。这样子,当...
    东野文然阅读 9,841评论 0 6
  • 一、NSThread、 GCD、 NSOperation 抽象封装度层次从低到高,抽象封装度越高使用越简单。 二、...
    兔兔小八哥阅读 6,291评论 0 7
  • 一个拿着照相机的男人走下飞机,就像其他初来大都会观光的旅客一样,刚踏上这片土地就迫不及待的拍了起来,咔嚓咔擦…… ...
    Nesier无恙阅读 3,823评论 0 51

友情链接更多精彩内容