人生就瞬间懵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里面

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" />希望大家踊跃留言,这次补着发表的,心痛,大家共勉。
















