Android WebView介紹

webview  ,用網頁來佈局。  Android    webview  是基於  webkit  內核,不過他的運行效果和  firefox  上如出一轍,因此寫的時候都是先用  firefox  測試,測試  OK  了再放到程序裏面看效果,基本上不會有什麼問題。其實  android    webview    iphone    webview  差很少,  iphone  上的  webview    android  上的強大多了。
談一下研究  webview  的一些成果:
 
一.     加載資源的速度不慢,可是資源多了,就很慢。圖片、  css    js    html  這些資源每一個大概須要  10-200ms  ,通常都是  30ms    ok  了。若是一個頁面上的資源不少,就很浪費時間。
 
二.     Js    css  的執行速度。開始的時候,個人頁面都是用  js  生成  DOM  ,添加樣式等也用  js  添加。後來發現,加載一個頁面竟然要  5-6  秒。而後我就懷疑是否是  js  的執行效率不高,而後就把能用  css  的地方都用  css  ,能直接寫到  html  上的就不用  js  動態生成。結果,速度並無多大的提高,最多提高了  1  秒。看來,  Js  的執行速度雖然比不上  css  ,可是還不至於慢到那種程度。那會是什麼緣由使得頁面加載速度這麼慢?通過仔細的排查,最終發現,是由於我用了  jQuery  框架。
Webview  加載頁面的順序是這樣的:先加載  html  ,而後從裏面解析出  css    js  文件和頁面上寫死的圖片資源進行加載,若是  webkit  的緩存裏面有,就不加載。加載完這些資源以後,就進行  css  的渲染和  js  的執行。  Css  的渲染通常不須要很長時間,幾十毫秒就  ok  。關鍵是  js  的執行,若是用了  jQuery  ,則執行起來須要  5-6  秒。而在這段時間,若是不在  webview  裏設置背景,網頁部分是白色的,很難看。這是一個很糟糕的用戶體驗。因此若是用網頁佈局程序,最好別用很大的  js  框架。
 
三.      網頁和  Java  之間的互調。這個功能是  iphone  裏面就有的,網上也有不少資料,能夠告訴咱們怎麼作,這些都是很簡單、很基本的。我研究了一段時間,總結一下:
  1.   Java  調用  js  裏面的函數,速度並不使人滿意,大概一次一兩百毫秒吧,若是要作交互性很強的事情,這種速度會讓人瘋掉的。而反過來就不同了,  js  去調  java  的方法,速度很快,基本上  40-50  毫秒一次。因此儘可能用  js  調用  java  方法,而不是  java  去調用  js  函數。
 2.   Java  調用  js  的函數,沒有返回值,而  Js  調用  java  方法,能夠有返回值。返回值能夠是字符串,也能夠是對象。若是是字符串,有個很討厭的問題,第 3  點我會講的。若是是對象,這個對象會被轉換爲  js  的對象,直接能夠訪問裏面的方法。可是我不推薦  java  返回給  js  的是對象,除非是必須。由於  js  收到  java  返回的對象,會產生一些交換對象,而若是這些對象的數量增長到了  500    600  以上,程序就會出問題。因此儘可能返回基本數據類型或者字符串。
3.   Js  調用  java  的方法,返回值若是是字符串,你會發現這個字符串是  native  的,不能對它進行一些修改操做,好比想對它  substr  ,取不到。怎麼解決呢?轉成  locale  的。使用  toLocaleString()  函數就能夠了。不過這個函數的速度並不快,轉化的字符串若是不少,將會很耗費時間。
 
 
四.         網頁上拖動元素。網頁上有一個  div  ,想要拖動它到另一個地方,怎麼作?若是用  PC  上的網頁作法,監聽  onmousedown    onmousemove    onmouseup  就能夠了。可是在手機上,事件模型就不同了。在網頁上點擊,拖動,而後釋放,手離開屏幕的時候,  webview  纔會觸發  onmousedown   onmousemove    onmouseup  事件。因此,要想拖動,不能這麼作。這個問題困擾我很長時間,後來發現  iphone  上的作法,才解決了。  Iphone  上的  webview  有專爲觸摸屏設計的事件  ontouchstart    ontouchmove    ontouchend  ,這幾個事件的響應是實時的,就能解決拖動的問題了。
 
五.         一些小問題。  Webview  裏面的網頁,若是有  input  ,須要輸入,可是點上去卻沒反應,輸入法不出來。這種狀況是由於  webview  沒有獲取焦點。須要在  java  裏面給  webview  設置一下  requestFocus()  就好了。
 
六.         Android  上的  webview    iphone    webview  區別。目前爲止,我發現的區別有這麼幾個:
1    Android  上,  webview  不支持多點觸控,沒有  ongesture  系列事件,而  iphone  上有。
       2    Android  上的  webview  不支持透明,  iphone  上能夠
相關文章
相關標籤/搜索