用過webvIew開發的各位夥伴應該知道,一樣的html代碼在iOS手機上運行無壓力,可是在Android手機上運行,慢的要死。還會有各類奇怪的蛋碎問題。後來查閱了不少文章,決定使用crosswalk替換webview。 具體crosswalk是什麼你們百度吧,簡單講就是一個瀏覽器內核。比webview速度快,兼容性也好。html
下面就是介紹下導入的方式。導入方式建議參考官方文檔https://crosswalk-project.org/documentation/android.html 這裏再也不多說,這篇文章主要講遇到的問題和解決方法。android
這是中文版的導入方式https://software.intel.com/zh-cn/articles/v ios
須要說明的是,導入後會報錯,開始我也不知道是什麼緣由,最後發現是android target版本過低,就是android sdk我用的是19後來把target換成22就沒有問題了。就是android 5.1web
另一點,用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();
}
}
});this
因此我的比較推薦用setUIClient方法 另外,用一個問題 至今沒有解決url
就是在使用xwalkview時, 沒法禁用android的back鍵的解決辦法:spa
返回鍵的up事件被xwalkview處理並被return true了;這樣個人act就收不到也沒法再處理此事件了。個人作法是寫一個類派生自xwalkview,重寫dispatchKeyEvent函數,判斷是back鍵就直接return false;這樣返回鍵的UP事件就會繼續傳遞到activity,在個人act中再作邏輯處理。.net