整个结构是这样的,查单词后动态显示词典内容,需要网页,也就是webview动态加载js文件css文件,和html内容。
原来的设计是在webview中加上JavaInterface,在Html加载时调用,回到程序的主线程来获取数据。.js的加载方式由webview来实现,LoadUrl,加上一段js代码,因为js代码比较简单,所以不会有效率上的问题。
css是用document.add 的方法加载,css的文件名也是从主线程中拿到。
问题来了,在Android 3.0以上的系统上,不能够执行加载CSS的方法,应该是浏览器内核中的代码有所修改,屏蔽了动态加载的接口。
于是采用了一种笨方法,把css的文件名固定,html中调用,然后每次显示的时候都把词典的css拷贝到相应的目录中去,重命名为固定的名字。
这个方法引起了效率上的极大下降,但为了在4.0上能显示css,只好这样做了。
好,有点偏题了。。下面开始说正经内容。当Webview加载一个css之后,即使Acitivity被销毁,可能他的实例还在,webview的实例还在,所以当再一次加载css文件时,同命的css文件中的内容没有被替换掉,
而是使用了以前的缓存的css内容。解决办法是调用
public void clearCache (boolean includeDiskFiles) Since: API Level 1 Clear the resource cache. Note that the cache is per-application, so this will clear the cache for all WebViews used. Parameters includeDiskFiles If false, only the RAM cache is cleared.
这个函数来清空缓存,之后该干嘛干嘛,没有后顾之忧。