作为与js交互的优化之一,今天讲一下如何集成腾讯X5。
首先我们先了解一下TBS浏览服务:
背景知识:
1. TBS(腾讯浏览服务)的优势
速度快:相比系统webview的网页打开速度有30+%的提升;
省流量:使用云端优化技术使流量节省20+%;
更安全:安全问题可以在24小时内修复;
更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
兼容好:无系统内核的碎片化问题,更少的兼容性问题;
体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
功能全:在Html5、ES6上有更完整支持;
更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
视频和文件格式的支持x5内核多于系统内核
防劫持是x5内核的一大亮点
2. 运行环境
1)手机ROM版本高于或等于2.2版本
2)手机RAM大于500M,该RAM值通过手机 /proc/meminfo 文件的MemTotal动态获取
注:如果不满足上述条件,SDK会自动切换到系统WebView,SDK使用者不用关心该切换过程。
3. SDK尺寸指标
1)SDK提供的JAR包约250K
集成步骤
2.将下载的tbs jar包依赖到项目中
3.将原生webview控件改成jar包下的控件:
Java
android:id="@+id/forum_context"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
1
2
3
4
5
6
7
8
9
10
11
android:id="@+id/forum_context"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp"/>
4.AndroidManifest.xml里加入权限声明:
Java
1
2
3
4
5
6
7
8
9
5.Application初始化
Java
//非wifi情况下,主动下载x5内核
QbSdk.setDownloadWithoutWifi(true);
//搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
LogUtils.d("开启TBS===X5加速成功");
}
@Override
public void onCoreInitFinished() {
LogUtils.d("开启TBS===X5加速失败");
}
};
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//非wifi情况下,主动下载x5内核
QbSdk.setDownloadWithoutWifi(true);
//搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
QbSdk.PreInitCallbackcb=newQbSdk.PreInitCallback(){
@Override
publicvoidonViewInitFinished(booleanarg0){
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
LogUtils.d("开启TBS===X5加速成功");
}
@Override
publicvoidonCoreInitFinished(){
LogUtils.d("开启TBS===X5加速失败");
}
};
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(),cb);
剩下的配置大家自行配置就好了。
注意点
1.APP首次初始化很久
解决方案:
(1)多进程方案:
Java
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
QbSdk.initTbsSettings(map);
1
2
3
4
// 在调用TBS初始化、创建WebView之前进行如下配置,以开启优化方案
HashMapmap=newHashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER,true);
QbSdk.initTbsSettings(map);
(2)正价Service声明:
Java
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
android:label="dexopt"
android:process=":dexopt" >
1
2
3
4
android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
android:label="dexopt"
android:process=":dexopt">
公众号