您的位置:首页 > 移动开发

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

2017-10-19 09:56 357 查看
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);
}
});

[align=left]
5.Webview的控件布局时设置:[/align]
<WebView
android:id="@+id/web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layerType="software"
android:scrollbars="none" />

[align=left]
6.通过android系统的加速器来配置:主要在androidmanifest.xml中设置。[/align]
[align=left]
[/align]
[align=left]//开启硬件加速 app支持硬件加速:
[/align]
[align=left]application下:< application    android:hardwareAccelerated="true" ...>   [/align]
<application
android:hardwareAccelerated="true"
android:icon="@drawable/icon"
android:label="@string/app_name" >

[align=left]
[/align]
[align=left]在使用webview的界面中关闭硬件加速:
[/align]
[align=left]activity界面注册时:<activity    android:hardwareAccelerated="false" ..>[/align]
<activity
android:name="com.project.activity.MainActivity"
android:hardwareAccelerated="false" />


[align=left]
[/align]
[align=left]总结:webview白屏是一件很神奇的事情,目前我还没有找到最优的解决办法,只能通过这些方面来减小白屏情况出现的概率,以后还得继续研究。[/align]
[align=left]           学无止尽!!!  [/align]
[align=left]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息