人生就瞬间懵b了,作为一个勤勤恳恳码奴开始我的重写之旅
2016年10月27日 23:34:08
之前我公司里新出了个需求,就是让webview里显示视频,作为一只老鸟,我也是爬过无数的坑的,第一反应我就放弃了系统原生的webview,即使它现在比以前好了很多,我以前做过ionic,使用过crosswalk,不过相对我们项目,本身包体大小不大,为了一个小需求突然增大十几M,boss肯定是接受不了,最后就选择了微信同款QQ浏览器X5内核,其实也就是个高度订制的webview,当然完成需求就行
废话太多开始操作:
先看下老马对自己产品的自述吧:
其相对于系统webview,具有下述明显优势:

1) 速度快:相比系统webView的网页加载速度有近30%的提升。
2) 省流量:云端优化技术使流量节省20%
3) 更安全:24小时安全问题解决机制
4) 更稳定:经过亿级用户的使用考验,CRASH率0.15%
5) 集成强大的视频播放器,支持各种视频格式直接打开
6) 适屏排版、字体设置等浏览增强功能的提供
7) Html5更完整支持。
8) 无系统内核的碎片化问题,更少的兼容性问题

上述所示,我只验证了第5条,其他的需要大家努力

1.下载sdk

下载链接:http://x5.tencent.com/doc?id=1004

建议:从demo里直接拷贝出sdk,因为本身的sdk里面是没有so文件的,哈哈一坑

2.把jar和so导入 libs里面

x5内核demo_腾讯


3.权限

<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.需要视频播放还需要在配置文件里

兼容视频播放:
1)享受页面视频的完整播放体验需要做如下声明:
页面的Activity需要声明android:configChanges="orientation|screenSize|keyboardHidden"
2)视频为了避免闪屏和透明问题,需要如下设置
a)网页中的视频,上屏幕的时候,可能出现闪烁的情况,需要如下设置:Activity在onCreate时需要设置:
getWindow().setFormat(PixelFormat.TRANSLUCENT);(这个对宿主没什么影响,建议声明)
b)在非硬绘手机和声明需要controller的网页上,视频切换全屏和全屏切换回页面内会出现视频窗口透明问题,需要如下设置
声明当前<item name="android:windowIsTranslucent">false为不透明。

特别说明:这个视各app情况所需,不强制需求,如果声明了,对体验更有利
c)以下接口禁止(直接或反射)调用,避免视频画面无法显示:
webview.setLayerType()
webview.setDrawingCacheEnabled(true);

5.使用之前需要创建一个预加载service

import .Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

import com.tencent.smtt.sdk.QbSdk;

/**
 * Created by Administrator on 2016/10/14.
 */

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

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

    private void initX5() {
        QbSdk.initX5Environment(getApplicationContext(), QbSdk.WebviewInitType.FIRSTUSE_AND_PRELOAD, cb);
        Log.d("gggbbb","预加载中...");
    }

    QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

        @Override
        public void onViewInitFinished(boolean arg0) {
            // TODO Auto-generated method stub
            Log.e("0912", " onViewInitFinished is " + arg0);
        }

        @Override
        public void onCoreInitFinished() {
            // TODO Auto-generated method stub

        }
    };
}

6.在application中onCreate()启动预加载service

private void initX5() {
        Intent intent = new Intent(this, AdvanceLoadX5Service.class);
        startService(intent);
    }

大功告成,使用

<com.tencent.smtt.sdk.WebView

android:id="@+id/forum_context"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="5dp"

android:paddingRight="5dp" />

希望大家踊跃留言,这次补着发表的,心痛,大家共勉。