Webview載入介面白屏解決方法總結
阿新 • • 發佈:2019-01-07
webview巢狀HTML5介面白屏問題
問題介紹:在Android開發中,經常會遇到開發原生和H5巢狀的APP,而在android中載入H5介面時通常使用webview控制元件進行巢狀,而此時就會出現一些很神奇的事情——介面白屏。
如果遇到這種情況,那就只能退出程式,幹掉程序,然後重新進入app,重新載入介面,目前還沒有找到其他的解決方法。
經過多方面的研究,請教大神,總結了以下幾點來減小這種白屏情況出現的概率。
解決方案:
1.Android中載入網頁時介面會有快取,通過清除webview的快取,讓app每次進入該H5介面時都重新載入:
// 清快取和記錄,快取引起的白屏 mWebView.clearCache(true); mWebView.clearHistory(); mWebView.requestFocus(); WebSettings webSettings = mWebView.getSettings(); webSettings.setDatabaseEnabled(true); // 快取白屏 String appCachePath = getApplicationContext().getCacheDir() .getAbsolutePath() + "/webcache"; // 設定 Application Caches 快取目錄 webSettings.setAppCachePath(appCachePath); webSettings.setDatabasePath(appCachePath);
2.可以通過setAppCacheEnabled方法來控制webview是否有快取:
// 應用可以有快取 true false 沒有快取
webSettings.setAppCacheEnabled(false);
3.webview載入H5介面時,H5中的一些控制元件標籤可能使用後android中不支援,可以使用setDomStorageEnabled方法來處理:
// 解決對某些標籤的不支援出現白屏
webSettings.setDomStorageEnabled(true);
4.在不同android版本上出現白屏的情況:
mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重寫此方法表明點選網頁裡面的連結還是在當前的webview裡跳轉,不另跳瀏覽器 // 在2.3上面不加這句話,可以加載出頁面,在4.0上面必須要加入,不然出現白屏 if (url.startsWith("http://") || url.startsWith("https://")) { view.loadUrl(url); mWebView.stopLoading(); return true; } return false; } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } });
5.Webview的控制元件佈局時設定:
<WebView
android:id="@+id/web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layerType="software"
android:scrollbars="none" />
6.通過android系統的加速器來配置:主要在androidmanifest.xml中設定。 //開啟硬體加速 app支援硬體加速:
application下:< application android:hardwareAccelerated="true" ...>
<application
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name" >
在使用webview的介面中關閉硬體加速:activity介面註冊時:<activity android:hardwareAccelerated="false" ..>
<activity
android:name="com.project.activity.MainActivity"
android:hardwareAccelerated="false" />
總結:webview白屏是一件很神奇的事情,目前我還沒有找到最優的解決辦法,只能通過這些方面來減小白屏情況出現的概率,以後還得繼續研究。 學無止盡!!!