# Webview加载界面白屏解决方法总结

### mikey未雨绸缪

2017-10-19 09:56:55

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白屏是一件很神奇的事情，目前我还没有找到最优的解决办法，只能通过这些方面来减小白屏情况出现的概率，以后还得继续研究。
学无止尽！！！

版权声明：本文为博主原创文章，未经博主允许不得转载。 https://blog.csdn.net/qq_34584049/article/details/78280815
分享

### 相关推荐

- ### webview加载网页出现白屏

  无谓生活

  阅读 7083

  08-09

- ### 处理方案:webview 闪白屏问题

  Mubai公子

  阅读 3222

  07-14

- ### 解决webview加载网页出现白屏的问题

  到达彼岸

  阅读 3007

  12-29

- ### WebView 加载https 白屏以及重定向加载

  android_小路

  阅读 2215

  03-06

- ### WebView白屏问题

  天人不合一

  阅读 2069

  04-26

- ### WebView加载页面出现白屏

  子静静

  阅读 1051

  08-14

### 评论