将程序和数据分离的主要原因有三:
数据太大,导致上传apk耗时太长,用户下载apk的时候也很耗时,严重影响用户体验;
数据更新频率远没有程序更新频率高,如果每次升级apk都将数据打包在程序中,无疑每次都重复下载了数据;
如果将数据打包在程序中,发现数据有问题,在改善后不能及时更新给用户,必须要升级程序才能处理,很被动。
所以当一个程序比较大时,通常会拆分为如下三个部分:
程序:apk文件
基础数据:程序能够正常运行的必备数据,比如语音识别离线数据、手写识别本地数据、词典数据等;
支持数据:程序能够支持使用的数据,比如游戏每一关的数据、试卷题目数据、书本教材数据、记单词数据、电子书数据、音乐、视频数据等等,这些数据即使不下载程序也能正常使用,但这些数据能够被程序支持使用,下载得越多,程序的可玩性、使用价值就越高。
显然即使将程序和基础数据分离,也必须要有完整的基础数据程序才能正常运行,所以通常情况下会看到很多程序在打开时,会显示一段时间的加载数据界面,这个过程就是在从服务器下载基础数据的过程,所以对于程序和数据分离的解决方案通常是:从应用商城中下载apk -> 第一次进入apk、基础数据有更新或者检测到本地基础数据不完整时执行下载基础数据的操作 -> 进入程序,用户可自行浏览,选择感兴趣的支持数据进行下载。
上述的程序和数据分离的解决方案还存在如下几个问题:
如果基础数据过大,进入程序时加载数据的过程会很漫长,显然影响用户体验;
基础数据有更新时,如果只更新某一部分数据,显然升级整个基础数据是不合理的,有时候会有多个基础数据;
如果用户没有网络,显然不能正常使用该程序。
对于上面这两个问题的解决方案是:进入程序时,只下载主界面所依赖的基础数据,待进入程序时,后台下载其它界面所依赖的数据,如果磁盘空间不足,提示用户清理磁盘,如果用户此时点击相应还没有下载完数据的界面,提示用户数据正在加载中,请稍后。对于没有网络的用户,提供一个下载离线数据包的接口供用户下载之后自行拷贝到机器中使用。