關于H5在部分安卓手機上調用攝像頭拍照后瀏覽器自動刷新,無法上傳圖片的解釋

這個問題具體表現(xiàn)為在移動端瀏覽器上或android的webview上打開某個網頁 調用攝像頭拍照后,無法實現(xiàn)圖片上傳,瀏覽器會自動刷新;這一問題無法100%重現(xiàn),但概率不低:

在如紅米等低端安卓機上發(fā)生的概率會比較高。

用微信打開的網頁出現(xiàn)這種情況的概率更大;

跟調取系統(tǒng)相冊相比,調用攝像頭拍照出現(xiàn)這種情況的概率更大;

這個問題的原因主要是由于android底層設計缺陷引起的,讓我們看看這一行為過程到底發(fā)生了些什么:

1.當用戶從瀏覽器調用攝像頭時,Android系統(tǒng)會把系統(tǒng)進程從瀏覽器切換到攝像頭(或者相冊),這個時候瀏覽器進程變成了后臺進程;

2.由于Android操作系統(tǒng)的設計缺陷,此時瀏覽器進程的留存優(yōu)先級(不被系統(tǒng)kill掉的優(yōu)先級)與所有其它的后臺進程是一樣的,因此如果操作系統(tǒng)認為內存不足需要進行清理,此時瀏覽器進程將不會得到任何保護 -- 很不幸,因為瀏覽器占用內存一般都比較大,所以這次kill操作很容易kill掉瀏覽器進程;

3.當用戶選擇好圖片返回瀏覽器時,瀏覽器進程已經不復存在了,按照Android的機制,瀏覽器進程將進行恢復,試圖恢復到kill之前的狀態(tài) -- 很不幸,恢復到什么狀態(tài)是由瀏覽器來決定的,而瀏覽器不可能100%恢復到選擇文件之前的那個狀態(tài)。因此最終用戶所看到的現(xiàn)象就是:選擇文件完成后,瀏覽器刷新了一下,而刷新到什么狀態(tài)由瀏覽器決定。

對于這一問題,Android技術團隊的態(tài)度是回避(將bug標記為obsolete) -- 可能是因為此bug涉及了OS底層進程切換的機制,修復起來風險太高;而隨著手機設備內存容量的增大,這一問題所發(fā)生的概率會越來越小。

理解了問題的原因,對問題的一些表征也就有了合理的解釋:低端安卓機的內存更小,因此發(fā)生問題的頻率更高;而與選擇本地圖片相比,調取系統(tǒng)攝像頭所耗的內存更大(當拍攝有大量文字的圖片時尤其如此),因此調取攝像頭時問題發(fā)生的更加頻繁;當用戶已經開了很多別的App時,問題發(fā)生的概率更大。

感謝chuan chao‘s 分享

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評論 25 709
  • 所有的感受就想一條河流,如果我們壓抑感受就像在河流中筑堤截流,就會出現(xiàn)抑郁。必須讓所有的感受流動起來,流經我們...
    誼君閱讀 228評論 0 0
  • 一、前言 有句話是這么說的,程序員對工作是時刻準備著的。無論你是長假還是短假,只要有網,你就躲不開客戶。這樣子,當...
    東野文然閱讀 4,466評論 0 6
  • 一、NSThread、 GCD、 NSOperation 抽象封裝度層次從低到高,抽象封裝度越高使用越簡單。 二、...
    兔兔小八哥閱讀 2,145評論 0 7
  • 一個拿著照相機的男人走下飛機,就像其他初來大都會觀光的旅客一樣,剛踏上這片土地就迫不及待的拍了起來,咔嚓咔擦…… ...
    Nesier無恙閱讀 696評論 0 51

友情鏈接更多精彩內容