Android记一次web View加载显示问题

web View加载显示问题

在一次Android项目中,发现了一个Android webView加载显示问题,在此记一下避免忘记。项目中有多个webView来加载不同的h5页面,其中部分页面在首次加载过后可以实现加载成功,然而在加载了其它h5页面后,该h5页面出现了收起的页面点击后显示不出来不刷新,或者h5中的listView不再加载更多的数据问题,再查询了大量相关的问题下,可以看出是由于webView销毁不彻底而导致的。
那还能干嘛,肯定就是想方设法的销毁呗。
开始的时候使用网上提出的解决方法,比如说使用这种方式来创建web View:

WindowManager manager = getContext().getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
wvSystem = new WebView(getContext().getApplicationContext());
llWeb.addView(wvSystem,outMetrics.widthPixels,outMetrics.heightPixels-44);//llWeb是LinearLayout

在结束的时候destroy中调用方法:

wvSystem.removeAllViews();
wvSystem.destroy();

然而我使用了这个方法并没有什么效果,这个问题就这样被遗留了下来,然而突然有一天webView页面又出问题了啊,其它问题,但是还是归结于webView没有彻底销毁。于是进行单步调试,发现因为代码是使用了butter knife进行控件绑定,在调用webView销毁前先调用了unbinder.unbind();导致 webView控件直接为null,从而webView根本不能进行销毁,调整代码顺序,先调用上面webView的销毁然后调用webView清除历史,缓存,view,释放内存:

if(wvSystem != null) {
    wvSystem.clearHistory();
    wvSystem.clearCache(true);
    wvSystem.clearView();
    // clearView() should be changed to loadUrl("about:blank"), since clearView() is deprecated now
    wvSystem.freeMemory();
    wvSystem.pauseTimers();
    wvSystem = null; // Note that mWebView.destroy() and mWebView = null do the exact same thing
}

销毁完成后再调用unbinder.unbind(),释放控件。运行问题解决!!!
回头看了一下,其实前面调用销毁是对了的只是没有说到关键的一步。
文章中关键术语可能不对,描述比较直白,仅作问题记录,供大家参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值