在Android中使用webview时需要注意哪些事项?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1,展示webview的活动可以另开一个进程,这样就能和我们应用的主进程分开了,即使webview产生了伯父崩溃等问题也不会影响到主程序,如何实现呢,其实很简单,在androidmanifest.xml的活动标签里加上<代码> Android:过程=皃ackagename.web"> 代码就可以了。运行起来就会发现多了一个进程,哈哈。
2, webview的创建也是有技巧的,最好不要在layout.xml中使用webview,可以通过一个viewgroup容器,使用代码动态往容器里<代码> addview (webview)> 代码,这样可以在<代码> onDestory() 代码>里销毁掉webview及时清理内存,另外需要注意创建webview需要使用applicationContext而不是活动的背景下,销毁时不再占有活动对象,这个大家应该都知道了,最后离开的时候需要及时销毁webview, <代码> onDestory() 代码>中应该先从viewgroup中删除掉webview,再调用<代码> webview.removeAllViews (); webview.destory(); 代码>
创建
ll =, new LinearLayout (getApplicationContext ()),, ll.setOrientation (LinearLayout.VERTICAL);, 时间=wv new WebView (getApplicationContext ());
销毁
@Override rotected void  onDestroy (), {, ,ll.removeAllViews (),, ,wv.stopLoading (),, ,wv.removeAllViews (),, ,wv.destroy (),, ,wv =零;祝福; ,ll =零;祝福; ,super.onDestroy ();
3,进一步的优化,活动被动被杀之后,最好能够保存webview状态,这样用户下次打开时就看到之前的状态了,嗯,就这么干,webview支持<代码> saveState(包)代码>和<代码> restoreState(包)代码>方法,所以就简单了,哈哈,看看代码吧:
保存状态:
@Override protected void  onSaveInstanceState (Bundle outState), {, ,super.onSaveInstanceState (outState);, ,wv.saveState (outState);, ,Log.e(标签,,“节省国家…“),, }
恢复状态:
在活动的<代码> onCreate(包savedInstanceState) 代码>里,这么吊用:
如果(零!=savedInstanceState) {, ,wv.restoreState (savedInstanceState);, ,Log.i(标签,,“restore state"),, }{,其他 ,wv.loadUrl (“http://3g.cn"),, }
再总结几个坑
<代码> WebViewClient.onPageFinished()> 代码。你永远无法确定当WebView调用这个方法的时候,网页内容是否真的加载完毕了。当前正在加载的网页产生跳转的时候这个方法可能会被多次调用,StackOverflow上有比较具体的解释(如何监听WebView完成加载Android的URL ?),但其中列举的解决方法并不完美。所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可能<代码> WebChromeClient.onProgressChanged() 代码>比<代码> WebViewClient.onPageFinished()> 代码都要靠谱一些。
WebView后台耗电问题。当你的程序调用了WebView加载网页,WebView会自己开启一些线程(?),如果你没有正确地将WebView销毁的话,这些残余的线程(?)会一直在后台运行,由此导致你的应用程序耗电量居高不下。对此我采用的处理方式比较偷懒,简单又粗暴(不建议),即在<代码> Activity.onDestroy() 代码>中直接调用<代码> System . exit(0)> 代码,使得应用程序完全被移出虚拟机,这样就不会有任何问题了。
切换WebView闪屏问题。如果你需要在同一个ViewGroup中来回切换不同的WebView(包含了不同的网页内容)的话,你就会发现闪屏是不可避免的。这应该是Android硬件加速的错误,如果关闭硬件加速这种情况会好很多,但无法获得很好的浏览体验,你会感觉网页滑动的时候一卡一卡的,不跟手。
数据积累问题。开启缓存什么的有利于网页的浏览体验,但你会发现即使是清除了必要的内容,比如缓存,饼干,表单数据,历史,密码等等东西,你的应用程序所占用的存储空间还是会越来越大,到最后只好手动到系统设置的应用信息界面里清除数据了:(
滚动条问题.Android系统WebView的横向滚动条真是好粗的有木有…
在某些手机上,Webview有视频时,活动销毁后,视频资源没有被销毁,甚至还能听到在后台播放。即便是像刚才那样各种销毁Webview也无济于事,解决办法:在onDestory之前修改url为空地址。是不是很坑?