1. 程式人生 > >AgentWeb三方android web開源庫的理解和認識

AgentWeb三方android web開源庫的理解和認識

目前h5三方庫很少,開源的也很少,比較主流點的就是AgentWeb和騰訊x5的一個Web庫(AgentWebX5)。最近花了幾天時間閱讀AgentWeb原始碼和Demo。

分別從以下幾點來說下感受:

1學習其中的技術和實現:

(1)繼承自WebView時,在xml佈局引用,只需寫包名和類名。

<com.just.library.AgentWebView

android:layout_width="match_parent"

android:layout_height="match_parent"/>

通過這點,以便擴充套件,以後需要對某些view,進行新增新功能的時候,即可這樣做,就像support v7包裡,很多都是這樣處理 的,比如android.support.v7.widget.Toolbar。

(2)對各個版本的相容和處理。

在Android 4.4之前採用的是android 手機瀏覽器核心採用的是webkit,Android 4.4之後採用的是chromium作為核心。其中對於不同版本JS注入安全、防止記憶體洩漏、

通過WebBackForwardList來整理重定向的歷史。我們現有的是採用的是通過Activity中的堆疊管理來處理的。

2是否適合接入到本身專案中作為h5庫?

1AgentWeb

優點: (1)對於 WebView 的封裝 , 很多人都是抽象在一個基類裡面 , 封裝成一個 BaseWebActivity , 或者 BaseWebFragment (包括我們專案裡也是),複用性不高 , 而且容易導致 Activity 或者 Fragment 基類膨脹 。AgentWeb封裝的思路是通過代理,將WebView從Activity或者Fragment中代理出來,不在需要Activity或者Fragment內部建立和管理,通過抽出AgentWeb來管理和對webview進行設定。換句通用的話來解釋就是,之後要新建webviewActivity就不用依附在BaseWebActivity了。 (2)AgentWeb把WebView代理出來,將功能分成一個類去管理,WevCreator->負責建立WebView以及進度條、WebSettings->對WebView進行統一設定。JsEntraceAccess->Javascript方法訪問進行統一入口,這樣做使得每一個功能獨立,相互不影響,也使得AgentWeb的結構清晰,符合單一職責原則。 但是,我個人認為這樣的封裝,對於業務很多佈局都特別類似的,則不太合適,因為我們每個webview的顯示的佈局,幾乎就是一個標題欄+一個webview控制元件+一個progress bar(進度條)。 缺點: (1)如果佈局類似的話,就需要自己在此基礎上搭建基類baseActivity或者baseFragment,這樣和原有的設計就沒什麼區別了.。 (2)其次addJavaScriptInterface中的協議庫裡是寫成"Agent Web",如果需要引用的話,需要下載原始碼,更改庫。 (3)如果和h5協議比較多,使用該開源庫還是不是很方便,需要下載原始碼進行更改。 3結論: 因為安卓自身對webview支援就不是很友好,該庫並未替換核心,主要是對功能性的擴充,所以對頁面載入速度和渲染速度無明顯優化。