需求:
前端组做出的Web页面动画效果很炫酷,而且单个内容挺大的,造成WebView加载过慢,老大要求想想办法解决这个问题,不能让用户等待这么久才能加载完成。
一、网上找了下,有建议使用以下的方法完成一些优化:
(1)WebView缓存
WebSettings webSettings = webView.getSettings();
//设置WebView缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 开启 DOM storage API 功能
webSettings.setDomStorageEnabled(true);
//开启 database storage API 功能
webSettings.setDatabaseEnabled(true);
ps:五种缓存模式的设置setCacheMode:
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据。
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式。
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据。
(2)资源文件本地存储
资源等文件(不需要更新)本地存储,在需要的时候直接从本地获取。哪些资源需要我们去存储在本地呢,当然是一些不会被更新的资源,例如图片文件,js文件,css文件,替换的方法也很简单,重写WebView的方法即可。
(3)减少耗时操作
准确的说,是减少同步操作的操作时间,尽量使用异步操作替代同步操作。如果服务端存在读取数据库和计算耗时的操作,尽量使用异步(ajax)进行操作,把原本的时间花在异步操作上。
(4)客户端UI优化
比如加入加载的ProgressBar,ViewPager预加载。
以上解决方案都是针对于系统的WebView做的一些处理,那么如果使用其他的内核呢?所以又去网上开始研究,最终选定了微信高度定制的腾讯的X5内核,高度的定制以及良好的优化使得其加载速度得以很好的提升,以及对视频良好的支持性能使得动画加载更加流畅。
二、使用TBS腾讯X5内核加载
首先看看官方给出的优势简介:
(1)其相对于系统webview,具有下述明显优势:
1) 速度快:相比系统webView的网页加载速度有近30%的提升。
2) 省流量:云端优化技术使流量节省20%
3) 更安全:24小时安全问题解决机制
4) 更稳定:经过亿级用户的使用考验,CRASH率0.15%
5) 集成强大的视频播放器,支持各种视频格式直接打开
6) 适屏排版、字体设置等浏览增强功能的提供
7) Html5更完整支持。
8) 无系统内核的碎片化问题,更少的兼容性问题
重要是看中第一点,速度快,这是很符合需求的设计,加载速度快才能更好地完善用户体验,其次第五点也是也是很好的功能。
(2)官方给出的达人评价,感觉还是很有说服力的
“开放共享,有效解决本地其他APP在浏览安全性和兼容性方面的缺陷。”
–洪波 著名互联网分析师
“腾讯X5的稳定性表现明显优于其他系统浏览内核。”
–石延龙 手机QQ终端开发负责人
“通过与腾讯X5形成战略合作,大幅度提升了游戏体验,增强了玩家粘性。”
–马鉴 egret负责人
原生App加入HTML5已经成为主流,能大幅缩短App版本更新周期,而TBS让这种混合App的性能得到进一步的提升。
–刘鑫 APICloud的CEO
(3)使用方式:
1)第一步,下载SDK
下载地址:http://x5.tencent.com/doc?id=1004
下载完成后解压出jar包

放入项目的libs里面

集成应该就差不多了
代码里面不能使用原生WebView,其次xml里面定义:
<com.tencent.smtt.sdk.WebView
android:id="@+id/tbs_test_webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
2)第二步,AndroidManifest.xml里加入权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
3)第三步,测试是否成功
App 在启动后(例如在 Application 的 onCreate 中)立刻调用 QbSdk 的预加载接口 initX5Environment ,可参考接入示例,第 一个参数传入 context,第二个参数传入 callback,不需要 callback 的可以传入 null,initX5Environment 内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行所以不会阻塞 App 主线程,这个函数内是轻量级执行所以对 App 启动性能没有影响,当 App 后续创建 webview 时就可以首次加载 x5 内核了
4)混淆时候处理
-dontwarn com.tencent.smtt.sdk.**
5)还有一个比较强大功能
TBS不仅提供了强大的网页浏览功能,更提供了强大的页面H5视频播放支持,播放器同时支持页面,小窗,全屏播放体验,强大的解码能力,包括mp4,rmvb,flv,avi等26种视频格式支持。TBS播放器的播放场景不仅局限于H5页面播放,也可以接入一般的视频流链接,比如本地文件,网络的视频流链接。开发者如果想播放一个视频链接,在不自己开发播放器的前提下,一般做法是将视频的播放链接放到一个Intent里面,抛给系统的播放器进行播放,那么当你集成了TBS后,你只需要通过简单的方式接入视频播放调用接口,这样你不需要写任何一句关于播放器的代码,就可以享受一个本地播放器体验,播放视频再不需要Intent来跨App、跨进程的调用了。
最后,使用后确实比原先加载速度有所提升,而且动画流畅度有所提升,建议在允许的情况使用,效果还是不错的,有使用问题欢迎讨论。
个人邮箱:jsmeli@163.com