1. 程式人生 > >Webview載入介面白屏解決方法總結

Webview載入介面白屏解決方法總結

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白屏是一件很神奇的事情,目前我還沒有找到最優的解決辦法,只能通過這些方面來減小白屏情況出現的概率,以後還得繼續研究。            學無止盡!!!