用过webvIew开发的各位伙伴应该知道,同样的html代码在ios手机上运行无压力,但是在android手机上运行,慢的要死。还会有各种奇怪的蛋碎问题。后来查阅了很多文章,决定使用crosswalk替换webview。 具体crosswalk是什么大家百度吧,简单讲就是一个浏览器内核。比webview速度快,兼容性也好。
下面就是介绍下导入的方式。导入方式建议参考官方文档https://crosswalk-project.org/documentation/android.html 这里不再多说,这篇文章主要讲遇到的问题和解决方法。
这是中文版的导入方式https://software.intel.com/zh-cn/articles/v
需要说明的是,导入后会报错,开始我也不知道是什么原因,最后发现是android target版本太低,就是android sdk我用的是19后来把target换成22就没有问题了。就是android 5.1
另外一点,用webview的时候会用到setWebViewClient 方法 xwalkview 对应的方法 官方说是setResourceClient 但是我试了以下 个人感觉用setUIClient比较好。因为用webview的时候。我经常会用到 mWebView.setWebViewClient(new WebViewClient(){
public void onPageStarted(WebView view, String url, Bitmap favicon) {
customProgressDialog = CustomProgressDialog.createDialog(LogActivity.this);
customProgressDialog.show();
}
public void onPageFinished(WebView view, String url) {
customProgressDialog.dismiss();
}
});
在onLoadFinished和onLoadStarted中写一些方法和效果,但是用xwalkview是 同样想实现某些效果只能用
mXWalkView.setUIClient(new XWalkUIClient(mXWalkView){
public void onPageLoadStarted(XWalkView view,String url){
Log.i("mXWalkView onPageLoadStarted",url);
//加载中 请稍后
customProgressDialog = CustomProgressDialog.createDialog(LogActivity.this);
customProgressDialog.show();
}
public void onPageLoadStopped(XWalkView view,String url,XWalkUIClient.LoadStatus status){
Log.i("mXWalkView onPageLoadStopped",url);
customProgressDialog.dismiss();
if(url.equals("file:///android_asset/html/docs/login.html#")){
canGoBack = false;
Log.i("mXWalkView onPageLoadStarted","canGoBack"+canGoBack);
// mXWalkView.load("file:///android_asset/html/docs/login.html",null);
mXWalkView.getNavigationHistory().clear();
}
}
});
所以个人比较推荐用setUIClient方法 另外,用一个问题 至今没有解决
就是在使用xwalkview时, 无法禁用android的back键 还请各位大神知道的留言告诉我。
最后我用的是mXWalkView.getNavigationHistory().clear(); 方法,清空历史记录,这样再点击back键 就没有效果了。页面就不会跳转。
个人觉得国内用crosswalk的还是有一些的 但是文章很少,因为时间问题,不能写特别详细的步骤,希望大家体谅和支持。