最近在做Webview加载页面的时候,用到了腾讯的X5内核,但是在使用过程中发现每次点击链接时,都会有一定的延迟,之后才能跳转到对应的页面,这体验很不好。。。 所以就抽时间找问题,解决问题。
原因
通过一步一步的调试,发现在加载X5内核的时候,X5内核需要进行一些初始化,这些初始化如果不明确指出运行的线程,它就会在你启动页面的时候,默认在主线程中执行,这就导致了上面的问题出现。
解决问题
提前初始化X5内核
在Application中就对X5内核进行初始化,而且最好另外开辟服务子线程进行初始化,防止ANR问题。
最终的解决结果:
1.新增IntentService,初始化X5内核
package com.rencarehealth.mirhythm.service;
import android.app.IntentService;
import android.content.Intent;
import android.support.annotation.Nullable;
import com.tencent.smtt.sdk.QbSdk;
public class X5CorePreLoadService extends IntentService {
private static final String TAG = X5CorePreLoadService.class.getSimpleName();
public X5CorePreLoadService() {
super(TAG);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
//在这里添加我们要执行的代码,Intent中可以保存我们所需的数据,
//每一次通过Intent发送的命令将被顺序执行
initX5();
}
/**
* 初始化X5内核
*/
private void initX5() {
if (!QbSdk.isTbsCoreInited()) {
QbSdk.preInit(getApplicationContext(), null);// 设置X5初始化完成的回调接口
}
QbSdk.initX5Environment(getApplicationContext(), cb);
}
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
// TODO Auto-generated method stub
//初始化完成回调
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
}
};
}
2.在application的onCreate中,启动该服务,进行初始化
/**
* 初始化X5内核
*/
private void preInitX5Core() {
//预加载x5内核
Intent intent = new Intent(this, X5CorePreLoadService.class);
startService(intent);
}
3.最后,别忘了在AndroidManifest.xml中配置服务组件
<service
android:name=".service.X5CorePreLoadService"
android:enabled="true"/>
OK了,再点击Web页面链接,瞬间跳转到页面加载过程!!