背景
一开始让我用 X5 我也是拒绝的。但因为一些蜜汁问题,个别机型在不使用 X5 时 WebView 页面会乱掉或者弹窗失效,所以不得不用,于是我先参考了一下旧项目中的加载方式:
旧项目(API 21)上的加载方式是:在 Application 中的onCreate()
方法中直接执行 QbSdk.initX5Environment(getAppContext(), null);
但在新项目(API 28)上这样用时,有个别机型(比如小米 MIX2、小米 Note3)只有在首次打开 WebView 正常,第二次打开要么 WebView 加载特别慢,要么就直接 ANR 了。
原因及解决方法
出现这个问题的原因在于 TBS X5 框架是需要将 X5 内核下载到本地的,也就是说 初始化 X5 框架时必须要有相关的存储权限才能进行下载并初始化。
然而,在 API 23 (Android 6.0)之前是不需要动态加载权限的。
所以,正确的解决姿势是:
targetSdkVersion < 23,直接在 Application 中初始化;
targetSdkVersion >= 23,请求存储权限成功后再去做初始化。
最后补充一下:
关于6.0之后的权限问题:从 Android 6.0(API 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。详情请看在运行时请求权限
关于X5内核初始化方法:其实没必要起个服务来初始化,接入文档写的很清楚了,直接QbSdk.initX5Environment(getAppContext(), null);
就可以。因为initX5Environment()
内部会创建一个线程向后台查询当前可用内核版本号,这个函数内是异步执行,所以不会阻塞 App 主线程,而且这个函数内是轻量级执行,对 App 启动性能可以说是没有影响的。
网友评论