WiFi下的全量更新

目前系统有接近100个QP包,每个1M左右,在考虑到为用户省流量的情况下,我们不能在任意网络情况下都去下载QP包,所以只在WiFi环境下进行所有QP包的下载,逻辑如下图所示。

image

几个关键点:

  1. 客户端启动的时候,如果是wifi,则会下载全部qp包。如果非wifi,则什么都不做
  2. 下载全部qp包的时候,打开了一个业务的话,这个业务的资源包下载就具有最高的优先级。设计下载的时候,是按串行队列进行的,这样有利于优先级调整。
  3. 进入特定的业务,会进行单页更新请求,如果有新的资源包,则会下载,但是不会直接使用
  4. 下载完的包,iOS在app进入首页的时候,就会认为业务都处于关闭状态,进行资源包的替换;Android由于再次打开app会重启,所以替换资源包都是在app启动的时候进行的。
  5. app 启动的时候,会加载所有的资源包,加载时会挨个进行md5校验,如果校验不过,会舍弃相应的资源包。
  6. 在加载资源的时候,还需要检验app中内置的资源的版本是否比使用的资源的版本高,如果高的话,就用app中内置的的资源替换使用的资源。这种情况只有在app更新时出现。
  7. 当下载完QP包之后,并不能直接替换,因为当一个QP包被使用过之后,如果马上替换,可能会出现第一个页面和第二个页面使用了不同版本QP包的情况,在两个版本不兼容的情况下,将会引起线上故障,所以替换需要定一个时机。
    1. 当QP包未被使用过,则下载完就直接替换达到可使用状态。
    2. 当QP包已经被使用过了,下载完之后先放到缓存目录,等替换时机(图上有)出现了,再替换。