我是靠谱客的博主 优雅银耳汤,最近开发中收集的这篇文章主要介绍webView项目总结(持续更新...)共勉,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

共勉

无论是写文章,还是摘录文章,都是一个梳理思维,学习成长的过程,当忘记了还可以回来翻一下,看一看,或者有什么新的想法可以重新编辑一下,方便了自己,也分享了知识,有意的可以一块学习,互相交流。谢谢大家!有错误或者意见还请指出共同进步。

网上关于webview加载html网页的内容也很多,在这里不多说,在这里说一下我项目中遇到的虽然说简单但是一时想不到的东西。

one

在客户使用报错java.lang.RuntimeException: android.os.DeadSystemException,如果你有幸也遇到了这个错误,那应该也是webview的坑,通过查阅stackoverflow和大神的一些博客,这个问题是由于 webview还没有加载完成,这个时候要关闭它,此过程中系统报出这个错误。解决办法就是 当你结束webview的时候,Webview还依附在父控件下,使用解决这个问题就是在WebView.destroy()前要解除他们之间的依附关系。


//在你的界面的destory中执行这段代码,就可以解决你的错误。
parent.removeView(webView);
webView.removeAllViews();
webView.destroy();

two

自定义错误的提示界面

 //当发生错误时调用此方法
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
// 自定义错误提示页面,背景色为灰色,带有文字(注意文字不要输汉字,由于编码问题汉字会变乱码
)
String errorHtml = "<html><body style='background-color:#e5e5e5;'><h1>Page Not Found " +
"!</h1></body></html>";
view.loadData(errorHtml, "text/html", "UTF-8");
//当然你可以加载本地已经有的界面
//view.loadUrl(" file:///android_raw/error.html");
}
});

three

获取Web页中的title用来设置自己界面中的title

 @Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
//对自己的控件赋值
txtTitle.setText(title);
}

four

如何截获webview中加载的url并判断是app内显示还是跳转浏览器显示?


// 网页加载开始调用的方法
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
loading.setVisibility(View.VISIBLE);
//url就是你加载的URL字符串,我们读取到某些特殊的URL,你可以判断包含哪部分而做出不同的处理(我项目中跳转的事本公司的网址)
if (url.contains("你加载的网址特殊的部分") || url.contains("你加载的网址特殊的部分")) {
//跳转浏览器访问
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
//webview显示
super.onPageStarted(view, url, favicon);
}

如果你想截获后并修改。请看(不过很少有这样的需求)
http://www.tuicool.com/articles/VFzY3y3

four

android webview ZoomButtonsController 导致android.view.WindowLeaked 问题

错误的原因其实就是:webview的 ZoomButton,也就是那两个放大和缩小的按钮。如果设置为让他们出现,并且可以自动隐藏,那么,由于他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果调用了父容器的destroy方法,就会导致Leaked。解决方案就是,在destroy之前,先让他俩立马消失。

找到一个简单的方法:


@Override
protected void onDestroy() {
//清除总布局所有的子view,就不会报错了
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
//双重保险,让webview隐藏
webView.setVisibility(View.GONE);
webView.removeAllViews();
webView.destroy();
super.onDestroy();
}

发现是,导致的。如果设置为让他们出现,并且可以自动隐藏,那么,由于他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果调用了父容器的destroy方法,就会导致Leaked。
所以
至于立马消失的方法,网上大多抄来抄去,没有效果。
我的解决办法是,在finish掉此activity时,把子view 全部remove掉。理论上说,只需要remove这个zoom view就可以,但是我没找到获取该view的办法,只好remove掉所有的子view。这样在activity destroy时就不会报WindowLeaked的错误了。

five

https://www.jianshu.com/p/b9164500d3fb
https://www.jianshu.com/p/2b2e5d417e10
https://www.jianshu.com/p/44b977907e51

最后

以上就是优雅银耳汤为你收集整理的webView项目总结(持续更新...)共勉的全部内容,希望文章能够帮你解决webView项目总结(持续更新...)共勉所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部