Android 从本地和服务器拉取数据显示

需求分析

在做GankIO客户端App时,有这样一种需求:类似微信消息列表界面,每次进入该界面时,都会先显示本地的数据,同时向服务器拉取最新的数据,减少用户等待数据的时间,以增强用户体验。

概要设计

我已经使用RxJava中的merge操作符实现该需求。现在如果不用RxJava框架,这个怎么实现?如何封装一个好用的模块给上层使用?

这里需要同时在本地、服务器拉取数据,而且两件事情都做完后,整个事情才做完,故我们设计两个任务并行执行。
class DataFetcher{
   
    LocalDataFetcher;
    RemoteDataFetcher;
}

线程上下文切换的工作交给AsyncTask内部的Handler处理,这样基本的数据结构就完成了。

编码实现

底层DataFetcher模块:

package com.liguang.datafetcher;

import android.os.AsyncTask;
import android.util.Log;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 并行加载本地和远程数据
 */
public class DataFetcher {
    private static final String TAG = "DataFetcher";
    /**
     * 上层,只在主线程读写
     */
    private WeakReference<Callback> mRef;
    private Worker mLocalFetcher;
    private Worker mRemoteFetcher;
    private String mUrl;

    public DataFetcher(String url, Callback callback) {
        mRef = new WeakReference<>(callback);
        mUrl = url;
        //假数据
        mLocalFetcher = new Worker(500, new String[]{
  "D", "E", "F"});
        mRemoteFetcher = new Worker(2500, new String[]{
  "A", "B", "C", "D", "E", "F"});
    }

    /**
     * 页面退出时需要调用该方法
     */
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值