近期H5游戏比较火爆,而在开发h5的app端过程中对比了好几家渠道商,发现webview多多少少存在一些问题,故发这篇文章总结一下。
1.系统webview,功能简单,加载较快,不支持webgl等功能
2.Crosswalk,支持webgl等h5功能,也支持各个平台架构。但是安装包体积庞大,会多出20-40M
3.腾讯tbs 支持webgl等h5功能,不支持x86架构,在x86机型上会使用自带的webview,难得的是tbs安装包只是增加几百k,但tbs的加载比较花时间,可做以下优化
1)预加载tbs,在启动程序时启动预加载,收到回调即加载完毕,这一步的作用是提前加载tbs,在需要的时候可以直接使用,以及判断tbs是否加载完毕。
//初始化X5
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
// TODO Auto-generated method stub
// x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
isX5Finish = true;
isX5Loaded = arg0;
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
}
};
QbSdk.initX5Environment(this, cb);
复制代码
2)虽然开了预加载后面加载快了。但是程序第一次启动还是会比较慢,这是因为第一次启动时候需要初始化x5数据。可以使用腾讯提供的优化策略:多进程优化方案
a) 设置开启优化方案
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
QbSdk.initTbsSettings(map);
复制代码
b) 增加Service声明
<!- 在AndroidManifest.xml中增加内核首次加载时优化Service声明;
该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务,
任务完成后自动结束。 -->
<service
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
android:label="dexopt"
android:process=":dexopt" >
</service>
复制代码
具体地址:x5.tencent.com/tbs/technic…
3)最终不管如何优化,x5的加载都是需要时间的,非常不建议闪屏后的第一个页面layout中使用x5控件