# 为何会碰到这种问题

一般 APP 在初始化的时候会从服务器获取一些基础数据,但是这些数据一般都不会很大,最多几百 KB 的数据而已,但是我最近碰到初始化数据有 35M 之多,直接导致 APP 解析超大 json 的时候崩溃掉.

# 解决办法

  • 一般来说这种大量的基础数据是会直接存在本地的,但是此次处理的 APP 中确实需要从服务器拉取相应的初始化数据,为了解决这个问题,我尝试过使用 fastJson 来序列化 json (项目中使用的时 Gson 序列化), 但是毫无疑问不行
  • 我们只能通过精简 json 的体量和分页处理数据来处理.

# 具体实现

  • 在第一次获取增量更新数据的时候将分页 0 传递
ArrayList<JPromiser> adjustQs = JPromiserWhereStack.newInstance().add(QbsSyncDomainService.syncAdjustmentDataN(context, adjustmentDataDate, 0))
                .addWhere("success", getSyncAdjustQ(context, adjustmentDataDate)).getTask();

拿到分页总数目

int pageCount = t.getContent().getPageCount();
                        getWallet().putExtra("pageCount",pageCount);
                        getPromiser().putWhere("success");
  • 在第一次调用成功后根据得到的分页信息进行下一步处理
private Promiser getSyncAdjustQ(final Context context, final Date[] adjustmentDataDate){
        return new Promiser() {
            @Override
            protected void aync(Deffered<String, String> d) {
                Integer pageCount =d.getWallet().getSafeInt("pageCount");
                if (pageCount>1) {
                    for (Integer i = 1; i < pageCount; i++) {
                        Promiser promiser = QbsSyncDomainService.syncAdjustmentDataN(context, adjustmentDataDate, i);
                        tasks.add(promiser);
                    }
                }
                d.resolve();
            }
        };
    }

分页数量大于 1 时继续添加分页请求,剩余几页就添加几次请求进去,保证所有的数据都能完整获取下来.