腾讯X5内核使用 Android WebView 的一些小问题

时间:2024-02-25 17:00:19

大家好,我是博客小白,第一篇文章,文笔不好,务喷,希望能给各位提供点帮助

 

 

公司做个商城,然后我就简单的做个启动引导页,然后用个原生WebView套一下,加个加载动画,解决下第三方登录支付的返回问题,这些问题以前也搞过,哎哟,俩小时,一个项目OK了,沾沾自喜中。

然后过了几天,老板就开始反馈,APP加载太慢了,滑动卡顿,然后叫我组解决。然后我想了下,已经设置了延时加载图片,你这个图片那么多,卡卡的怪我咯,想了想,哎,想在下面这个方法中搞个图片压缩替代

1 @Override
2 public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
3     return super.shouldInterceptRequest(webView, s);
4 }

 

 

然后,我忘记了百度搜索什么鬼的时候,在一个贴吧看到了腾讯X5内核,替代系统内核,然后我果断搜索下了官网   http://x5.tencent.com/tbs/  

 (Ps: 这编辑器什么鬼啊,怎么没有url输入啊,还有,我编辑了html代码,加了个<a>标签为什么不管用)

哎哟,不错啊,高大上啊,赶紧下个demo,看着套一下,挺高大上的,你们看 ↓↓↓↓↓↓↓↓↓↓↓↓

 

 

哇,简直了对吧,哈哈,就你了。

 

下载官方demo,然后,怎么是个eclipse的版本啊,而且只有这一个,这简直不能配上马总的高大上啊,哎哟算了,先导入运行再说。

导入as后,配置下gradle,导入jar包,so库,哎哟,腾讯就是腾讯啊,资源,代码一个错误没有,用gradlew build打个包瞅瞅呗。

咦,报错了,这个错误见过很多次,资源错误,模块冲突,都爆这个错误, 应该是包导入有问题吧。

 

 

 

 

然后,我怀疑我遇到个假腾讯网站,不说了,贴图


 资源清单里面有4个activity没有定义,握草什么鬼,你认真的找了一遍,jar看完也没有这些activity啊,啧啧啧,注释掉也跑不了

然后我再次百度了下腾讯X5内核官网,百度上这一个X5官网,就这个,握草,腾讯,马总,看在我为你花了那么多钱的份上,你就这么对待我这位金主的么

 

哎,官网靠不住,马上上百度。

 

在百度瞅了瞅,然后顺便集成下,下面我就和各位说下我的集成步骤(可用)。

 

1.  导入jar包,和so库

2. 用到的所有原生WebView导入的类和接口都改导入  com.tencent.smtt.sdk   里面的类,类接口名对应

3. 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" />

 

4. 初始化X5内核。

// 在 application 里面加入 
@Override
    public void onCreate() {
        super.onCreate();

        preinitX5WebCore();
        //预加载x5内核
        Intent intent = new Intent(this, AdvanceLoadX5Service.class);
        startService(intent);
    }

    private void preinitX5WebCore() {
        if (!QbSdk.isTbsCoreInited()) {
            QbSdk.preInit(getApplicationContext(), null);// 设置X5初始化完成的回调接口
        }
    }


// x5 init service
public class AdvanceLoadX5Service extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        initX5();
    }

    private void initX5() {
        //  预加载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
        }
    };

}

 

握草, 能用了,好感动  , 哈哈哈哈      

然后还有就是,它右边自带滚动条小方块,用WebView去滚动的方法没软用,↓↓↓↓↓

        mMainWebView.setHorizontalScrollBarEnabled(false);
        mMainWebView.setVerticalScrollBarEnabled(false);
        //下面方法去掉
        IX5WebViewExtension ix5 = mMainWebView.getX5WebViewExtension();
        if (null != ix5) {
            ix5.setScrollBarFadingEnabled(false);
        }

 

好了,经过上面的配置,x5能搞了

说下x5内核优点:

 1. 原生WebView自带不支持git图片   x5支持

 2. 恩,加载快很多,它对图片压缩加载了

 3.  显示的时候,就是回调 onPageFinished() 这个的时候,界面已经很流畅了,这个boos肥肠满意

 4. x5看在我帅的面子上没给我报错,恩,好东西

 

我想说下第三方登录支付返回的问题和我的解决方案:

1. 我在 WebViewClient 接口的 onPageStarted() 用 ListView 保存非本公司的所有url (如果你问我为啥不在onPageFinished,也行我会告诉你我乐意,不不不,放onPageFinished有问题,别问我为什么,我不知道,你打印这俩个地方的url,特喵的少了几个url)

2. 我在onBackPressed() 里面搞了点事,至于什么事,不好解释呀,贴代码吧

@Override
    public void onBackPressed() {

        if (mMainWebView.canGoBack()) {
            int index = mGoBackUrlList.size();
            if (index == 0 || index == 1) {
                mMainWebView.goBack();
                mGoBackUrlList.clear();
            } else {
                if (mMainWebView.canGoBackOrForward(-index)) {
                    mMainWebView.goBackOrForward(-index);
                    mGoBackUrlList.clear();
                } else {
                    mMainWebView.goBack();
                    mGoBackUrlList.clear();
                }
            }

        } else {
            super.onBackPressed();
        }
    }

 

暂时能用,没人教我,只好用笨方法了 (PS:我想喷一下银联网页在线支付,你特么是大爷,进去了不绑定银行卡,不支付你特么就不然退是吧,行吧,大爷)

 

好了,就到这了,上面返回的问题,有人晓得不,能告诉下我不。 哎哟,谢谢哥几位啦 

(小弟菜鸟一枚,来到新地方,多有得罪,别见怪哈)