离线Android WebView应用
声明:本文转载自https://my.oschina.net/qixiaobo025/blog/1539793,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。
背景
最近碰到如下需求:
使用app商户由于长期处于地下室(维修厂)可能wifi或者4G信号受限,因此可能对于系统依赖离线数据。
思路
- 原先是网页应用,想要脱机使用有如下几种方式
- 保存网页(静态访问)
- H5 AppCache 通常来说提供5M左右的空间(未核实)为什么app cache没有得到大规模应用?它有哪些硬伤吗?
- 通过某些方式将所有的网页下载下来(比如类似于高德地图离线导航包)通过webviewclient的shouldInterceptRequest方法拦截指定url返回特定的内容 https://github.com/Carson-Ho/WebView_InterceptRequest 类似于天猫京东双11大促会将大量静态资源通过推送等方式缓存到本地以免在大促当天对于系统造成太大压力
- 本地搭建服务器
- 类似于程序开发,有一个宿主端提供对应接口调用返回结果(数据来源不单单是一个来源 较为复杂)
- 缓存访问资源
- 缓存空间有限,并且需要提前访问,完全利用浏览器自身缓存机制
- 用户可清除
-
上述总结后 发现对于要求较为满足的应当采用保存网页方式(通过在程序发布后自动下载服务端对应的网页包解压到指定assets文件夹下 通过文件映射完成)
参考 Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案
方案
- 通过某些方式将对应需要的所有资源打包压缩zip
- android端后台检测服务端是否存在更新zip
- 如果服务端存在则更新zip
- 下载完成后解压缩到指定目录 同时更新映射关系
- 用户通过webview访问(拦截在映射关系内的url 注意参数的处理以及随机参数的去除)
难点
- zip包生成(可以通过遍历等手段 将对应url和生成)
- 增量更新或覆盖更新
各位有其他更好的方案和建议可以留言提供~
抱拳了,老铁!
本文发表于2017年09月20日 08:37
(c)注:本文转载自https://my.oschina.net/qixiaobo025/blog/1539793,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.
阅读 2245 讨论 0 喜欢 0