当我们使用浏览器浏览网页时,常常想保存内容,目的可能是离线阅读或者是收藏。之前的一个项目用到一些,一并总结。
方式一,Snapshot
4.0支持此方法saveViewState(),方法源码如下
4.0原生浏览器其实是把网页的内容存入到BLOB中,缺陷很明显,网页一大就保存不了,查了下源码,BLOB保存的数据有大小限制。4.0上,超过2M大小的网页就没法保存,源码截图如下:
但是4.1上,saveViewState() 更新了参数,增加了回调。方法源码如下:
4.1原生浏览器去snapshot的处理更好了,明白了这个限制之后,网页的data不存数据库了,改存文件了,所以网页太大不能保存的问题就解决了。
考虑到大部分的网页都比较小的情况下,且实现上快速,采用4.0的方法。
主代码采用反射调用4.0 的saveViewState()方法,方法名改为mySaveViewState(),代码如下:
方式二,Stream(file)
因为2.3上不支持saveViewState()方法,所以采用SavePicture(),SavePicture()方法其实来自SaveState(),在webview前进后退后者其他操作时,会保存相应的状态。
方法源码如下:
具体实现上,我们需要传入一个bundle,保存相应的状态。
方式三: png
保存成图片的缺陷很大,放缩的失真,不能编辑。Webview有capturePicture()方法支持。源码中此方法的实现如下:
传入picture,具体实现如下:
方法四: 保存html网页
直接将url给下载管理器即可。