目前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支持就不是很友好,该库并未替换内核,主要是对功能性的扩充,所以对页面加载速度和渲染速度无明显优化。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐