關于Android WebView開發(fā)的前世今生册赛,你都知道嗎?

安卓原生APP中經常會內嵌個H5頁面,這就需要用到WebView震嫉。很多人對WebView的使用不以為然森瘪,

覺得也就那么回事,但實際上關于WebView我們能聊得有很多...

首先我們聊聊他的出生,眾所周知,因為爸爸都是谷歌公司,WebView和Chrome瀏覽器有著緊密的關系。

他們實際上都是谷歌Chromium Project下的頂級項目,鏈接:chromium project,他們的身上流著

相似的血液,不同的是:

1. Chrome瀏覽器是多進程架構(內存換速度)票堵,WebView 是單進程架構扼睬。

2. Chrome瀏覽器內存占用比 WebView大的多。

3. Chrome支持更多的HTML5 特性悴势。

The Chromium Project
不同內核的Webview差異(Android4.4后改用Chrome內核)

知道了webview的前世,就更有利于去使用他了窗宇。下面來聊聊他的今生

一個網頁的加載和渲染涉及到的流程很多,很多是我們android端沒法處理的特纤,那么從android開發(fā)的角度军俊,

當我們使用Webview去加載網頁的時候,該注意哪些呢捧存?或者說有哪些地方可以提高蝇完?來看看下面的幾點:

1.緩存

預加載、預緩存 可以讓加載速度的瓶頸更小矗蕊,網頁加載速度更快短蜕,? 這就涉及到Webview的緩存機制:

? Android WebView 自帶的緩存模式有5種:

? LOAD_CACHE_ONLY: 不使用網絡,只讀取本地緩存數(shù)據(jù)

? LOAD_NO_CACHE: 不使用緩存傻咖,只從網絡獲取數(shù)據(jù).

? LOAD_DEFAULT: (默認)根據(jù)cache-control決定是否從網絡上取數(shù)據(jù)朋魔。

? LOAD_CACHE_ELSE_NETWORK,只要本地有卿操,無論是否過期警检,或者no-cache孙援,都使用緩存中的數(shù)據(jù)。

? LOAD_CACHE_NORMAL: 已經廢棄(同LOAD_DEFAULT),

?使用方式:

WebView.getSettings().setCacheMode(WebSettings.XXX);

? 使用緩存后扇雕,一個是刷新機制拓售,一個是流量的問題,這兩個都需要格外注意镶奉。

2.硬件加速

? 這里的硬件加速實際上并非單指性能础淤,有很多高級特效需要硬件加速的支持,比如一些3D畫面

? 當覺得網頁卡頓或者不顯示時哨苛,可以嘗試打開

? 有四個級別:

? (1).應用級,需要在清單文件中設置

? <application?

? ? ? android:hardwareAccelerated="true">

? (2).Activity級

? <activity android:name=".TestActivity"

? ? ? android:hardwareAccelerated="false">

? </activity>

? (3).Window級別

? getWindow().setFlags(

? WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

? WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

? (3).View級別

? view.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

3.使用更高版本的瀏覽器內核(系統(tǒng)層面,需要會framework)

? 低版本的瀏覽器不僅性能低下鸽凶,而且對新語法支持不佳,

? 一些舊的內核可能要在html中增加'use strict'(嚴苛模式)這句話才能支持一些新的語法。

? 那么如何查看當前系統(tǒng)內核版本呢?

? 有很多方法,可以直接訪問工具類網站,如

? http://www.thismachine.info/(國外)?

? https://liulanmi.com/labs/core.html(國內)建峭,也可以直接在開發(fā)者工具里輸入navigator.userAgent查看,

? 如果可以更新的話玻侥,最好還是更新到最新的版本。

4.三方瀏覽器sdk

? 更新系統(tǒng)瀏覽器內核限制諸多,這時就要依靠第三方的瀏覽器sdk了亿蒸,這方面選擇不多,

? 國內的騰訊X5凑兰,國外的Crosswalk。個人建議用X5即可,畢竟國內的文檔全些边锁。要注意的是

? 即使引用了X5的jar包票摇,也并不代表就成功開啟了X5內核,它還要去下載一個內核才可以砚蓬。

? 并且會涉及到32位,64位等一些兼容性問題矢门,在一些小眾的芯片上甚至會奔潰。

? 具體的參考官方文檔吧灰蛙。

5.內存泄漏

?關于泄漏的有很多文章都已經寫了祟剔,這里不做詳細闡述了,基本上有這么2個點:

? (1).初始化用new的方式add到父容器里

? (2).退出時及時銷毀

public void destory() {

? if (mWebView != null) {

? ? ? ? Log.d(TAG, "WebView destory");

? ? ? ? mWebView.stopLoading();

? ? ? ? mWebView.clearHistory();

? ? ? ? mWebView.removeAllViews();

? ? ? ? mWebView.destroy();

? ? ? ? mWebView = null;

? ? ? }

? }

? 另外摩梧,我想補充一點的是物延,上面的方式是避免webview控件使用不當造成的泄漏,

? 但如果是webview里的內容造成了泄漏怎么辦?

? 首先仅父,不管是哪種泄漏叛薯,我們都應該對應用(webview)進行內存的監(jiān)控(AS用Profiler查看),

? 在PC端,可以用任務管理器查看笙纤,通過頻繁耗溜、持續(xù)的操作看看內存會不會增長。

任務管理器可以查看每個tab頁占用的內存大小

? 使用開發(fā)者工具中的Memory還可以定位到對象的內存省容,更加方便我們查找內存泄漏的源頭

? 其原理是通過兩次內存快照(snapshot)抖拴,然后做差比較(comparison),得出新增長的內存對象腥椒。

這里的列表是將內存大小從大到小排列,如果存在內存泄漏,那么要先從排列在前幾位的下手

6.調試

Android端的webview很難調試,因為無法使用開發(fā)者工具(Developer Tool)控制臺阿宅,谷歌瀏覽器可以支持遠程調試候衍,網上也有很多教程了,并不復雜洒放。

備注:

? 1.有時候會有清晰度的問題蛉鹿,要小心這兩個方法的使用:

? 自適應大小開啟后可能會導致web頁面元素縮放造成模糊現(xiàn)象

? webSetting.setUseWideViewPort(true);

? webSetting.setLoadWithOverviewMode(true);

? 2.Webview性能的量化(不服跑個分)

http://html5test.com/(不只是性能分數(shù),還有N項詳細指標,就是外網比較慢)

html5test,WebView的"體檢官"

? 安兔兔測試:

? http://www.antutu.com/html5/?gpv=10b996f92e9795aef1bad6ffcefe1db5d4d2ae48e1e718a576fdd7cd7b6691791011a080e3760e1b02259249f096b2fde253afb16

好了,到這里往湿,webview的前世今生就聊得差不多了妖异,大家有收獲嗎?

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末煌茴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子日川,更是在濱河造成了極大的恐慌蔓腐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龄句,死亡現(xiàn)場離奇詭異回论,居然都是意外死亡,警方通過查閱死者的電腦和手機分歇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門傀蓉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人职抡,你說我怎么就攤上這事葬燎。” “怎么了缚甩?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵谱净,是天一觀的道長。 經常有香客問我擅威,道長壕探,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任郊丛,我火速辦了婚禮李请,結果婚禮上,老公的妹妹穿的比我還像新娘厉熟。我一直安慰自己导盅,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布揍瑟。 她就那樣靜靜地躺著认轨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪月培。 梳的紋絲不亂的頭發(fā)上嘁字,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天恩急,我揣著相機與錄音,去河邊找鬼纪蜒。 笑死衷恭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纯续。 我是一名探鬼主播随珠,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猬错!你這毒婦竟也來了窗看?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤倦炒,失蹤者是張志新(化名)和其女友劉穎显沈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逢唤,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡拉讯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳖藕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魔慷。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖著恩,靈堂內的尸體忽然破棺而出院尔,到底是詐尸還是另有隱情,我是刑警寧澤喉誊,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布召边,位于F島的核電站,受9級特大地震影響裹驰,放射性物質發(fā)生泄漏隧熙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一幻林、第九天 我趴在偏房一處隱蔽的房頂上張望贞盯。 院中可真熱鬧,春花似錦沪饺、人聲如沸躏敢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽件余。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啼器,已是汗流浹背旬渠。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留端壳,地道東北人告丢。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像损谦,于是被迫代替她去往敵國和親岖免。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容

  • 這篇博客主要來介紹 WebView 的相關使用方法,常見的幾個漏洞栗精,開發(fā)中可能遇到的坑和最后解決相應漏洞的源碼闯参,以...
    Shawn_Dut閱讀 7,229評論 3 55
  • WebView·開車指南 2016-08-31BugDev 北京市東城區(qū)首席Bug布道師開山之作,一整月交通事故血...
    53c021c38a1d閱讀 829評論 0 1
  • 前言 由于業(yè)務需求更新迭代快术羔,發(fā)布新版本的App需要時間赢赊,即使發(fā)布了也不能保證用戶立即更新乙漓,因此越來越多的app使...
    JeremySun0823閱讀 2,868評論 1 10
  • 前言 Android項目中WebView是必不可少的级历,越來越開的迭代節(jié)奏導致越來越多的App采用混合開發(fā),接著我們...
    半罐子晃閱讀 1,832評論 0 4
  • 我們每一個人在生活的舞臺上都充當著某一種角色叭披。角色是身份寥殖,不同的身份有著不同的...
    冰夫閱讀 290評論 0 0