腾讯TBS浏览服务(X5WebView的使用)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯TBS浏览服务(X5WebView的使用)相关的知识,希望对你有一定的参考价值。
参考技术A 官网地址: https://x5.tencent.com1、TBS(腾讯浏览服务)的优势
1) 速度快:相比系统webview的网页打开速度有30+%的提升;
2) 省流量:使用云端优化技术使流量节省20+%;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
7) 功能全:在html5、ES6上有更完整支持;
8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
2、权限声明:
3、libs文件下导入tbs的jar包
4、把项目X5WebDemo中的jniLibs文件以及文件夹下的所有文件复制到自己的main文件夹下
5、在gradle的defaultConfig下添加
例如:
6、优化异常上报:
为了提高合作方的webview场景稳定性,及时发现并解决x5相关问题,当客户端发生crash等异常情况并上报给服务器时请务必带上x5内核相关信息。x5内核异常信息获取接口为:com.tencent.smtt.sdk.WebView.getCrashExtraMessage(context)。以bugly日志上报为例:
7、在Application的oncreate()方法中初始化initX5Environment();
8、兼容视频播放:
9、以下接口禁止(直接或反射)调用,避免视频画面无法显示:
10、androidManifest 需要如下的注册
11、播放视频的调用接口
12、在X5WebView初始化的时候条用//这一段,尤其重要。
TBS 腾讯浏览服务 集成
腾讯浏览服务-首页 http://x5.tencent.com/
官方文档不多,不过实例比较详细,配置和谷歌的Webview差不多,Webview有的方法,TBS也都有。
jar包不到300KB,但是它需要X5内核,需要另外下载,不过如果手机装了微信QQ,就可以用它们的了。
把下载jar包添加到项目
在Application添加
public class App extends Application { @Override public void onCreate() { super.onCreate(); // 搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。 // TbsDownloader.needDownload(getApplicationContext(), false); QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished(boolean arg0) { // TODO Auto-generated method stub Log.e("apptbs", " onViewInitFinished is " + arg0); } @Override public void onCoreInitFinished() { // TODO Auto-generated method stub } }; QbSdk.setTbsListener(new TbsListener() { @Override public void onDownloadFinish(int i) { Log.d("apptbs", "onDownloadFinish"); } @Override public void onInstallFinish(int i) { Log.d("apptbs", "onInstallFinish"); } @Override public void onDownloadProgress(int i) { Log.d("apptbs", "onDownloadProgress:" + i); } }); QbSdk.initX5Environment(getApplicationContext(), cb); } }
MainActivity 布局全是按钮
public class MainActivity extends Activity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(MainActivity.this, WebActivity.class); } public void btn(View v) { switch (v.getId()) { case R.id.btn1: intent.putExtra("url", "https://www.huxiu.com/article/168405.html"); startActivity(intent); break; case R.id.btn2: intent.putExtra("url", "http://feizaojilao.esy.es/history.html"); startActivity(intent); break; case R.id.btn3: intent.putExtra("url", "http://v.qq.com/cover/z/z1x68ih8qwjbsen.html"); startActivity(intent); break; case R.id.btn4: intent.putExtra("url", "http://v.youku.com/v_show/id_XMTc3NTIzNjY2NA==.html?spm=a2hww.20023042.m_223465.5~5~5~5!2~5~5~A&from=y1.3-idx-beta-1519-23042.223465.4-1"); startActivity(intent); break; case R.id.btn5: intent.putExtra("url", "http://www.hao123.com/"); startActivity(intent); break; case R.id.btn6: intent.putExtra("url", "http://www.apta.gov.cn/Information/ActivityDetail?aid=167"); startActivity(intent); break; case R.id.btn7: intent.putExtra("url", "http://220.180.239.166/Information/ActivityDetail?aid=123"); startActivity(intent); break; default: break; } } }
WebActivity
public class WebActivity extends Activity { WebView tbsWebView; ProgressBar web_bar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); String url = getIntent().getStringExtra("url"); web_bar = (ProgressBar) findViewById(R.id.web_bar); web_bar.getProgressDrawable().setColorFilter(Color.RED, android.graphics.PorterDuff.Mode.SRC_IN); tbsWebView = (WebView) findViewById(R.id.tbsWebView); tbsWebView.loadUrl(url); WebSettings settings = tbsWebView.getSettings(); settings.setJavaScriptEnabled(true); // 设置加载进来的页面自适应手机屏幕 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setSupportZoom(true); settings.setBuiltInZoomControls(true); settings.setDisplayZoomControls(true); //settings.setUserAgent( ); tbsWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.e("WebView ", "shouldOverrideUrlLoading " + url); view.loadUrl(url); return true; } }); tbsWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); web_bar.setProgress(newProgress); if (newProgress == 100) { web_bar.setVisibility(View.GONE); } else { web_bar.setVisibility(View.VISIBLE); } } }); } @Override protected void onDestroy() { if (tbsWebView != null) tbsWebView.destroy(); super.onDestroy(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && tbsWebView.canGoBack()) { tbsWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } } }
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.tsbdemo.WebActivity" > <com.tencent.smtt.sdk.WebView android:id="@+id/tbsWebView" android:layout_width="match_parent" android:layout_height="match_parent" /> <ProgressBar android:id="@+id/web_bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="-7dp" android:layout_marginTop="-7dp" android:indeterminate="false" /> </RelativeLayout>
简单测试了一下,没有什么问题,感觉应该不会差,毕竟微信QQ内置的Webview都是这个
参考
性能 http://x5.tencent.com/guide?id=4000
Crosswalk 开发浅析,忘掉那些Webview的坑 - sslinp的博客 - 博客频道 - CSDN.NET http://blog.csdn.net/sslinp/article/details/51607237
Android WebView常见问题及解决方案汇总 - Whatever is worth doing is worth doing well. - 博客频道 - CSDN.NET http://blog.csdn.net/t12x3456/article/details/13769731
QQ浏览器X5内核问题汇总 https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/
以上是关于腾讯TBS浏览服务(X5WebView的使用)的主要内容,如果未能解决你的问题,请参考以下文章