DataLoader
Introduction: 一个 Android 异步数据加载框架,用于 Activity 打开之前预加载数据,页面启动速度优化利器
Tags:
DataLoader 是一个 Android 异步数据加载框架。最常用的场景用于 Activity 打开之前预加载数据,在 Activity 的 UI 布局初始化完成后显示预加载的数据,大大缩短启动时间。
DataLoader 的特点
- 用于异步数据加载。
- 基于 LiveData,生命周期感知,在 Activity 中使用的时候不用关注何时 remove listener。
典型应用场景
- 在 Application.onCreate 中预加载数据,在需要用到的页面中获取预加载的数据
- 在启动页中预加载主页所需的数据,减少用户等待时间
- startActivity 之前就开始预加载,UI 初始化完成后显示预加载的数据
- 复杂页面(UI 初始化耗时较多的页面)内部在 UI 初始化开始之前预加载数据,UI 初始化完成后显示预加载的数据
- ListView/RecyclerView 在上拉加载更多之前预加载下一页的数据
添加依赖
Via Gradle:
implementation 'com.jeremyliao:data-loader:1.0.0'
使用
1. 预加载数据
int preLoaderId = DataLoader.load(new LoadTask<String>() {
@Override
public String loadData() {
try {
Thread.sleep(1000);
} catch (InterruptedException ignored) {
}
return "data from network server";
}
});
Intent intent = new Intent(this, PreLoadBeforeLaunchActivity.class);
intent.putExtra("preLoaderId", preLoaderId);
startActivity(intent);
2. 使用预加载的数据
int id = getIntent().getIntExtra("preLoaderId", -1);
DataLoader.listen(id, this, new LoadListener<String>() {
@Override
public void onDataArrived(String data) {
tvShow.setText(data);
}
});
3. 刷新数据
DataLoader.refresh(id);
混淆规则
-dontwarn com.jeremyliao.dataloader.**
-keep class com.jeremyliao.dataloader.** { *; }
Demo
简单的 Demo 可参考:MainActivity.java
Reference
本项目参考了开源项目luckybilly/PreLoader,借鉴了 PreLoader 的设计思想和使用场景。只是利用 LiveData 重新实现,构架更为简单,使用起来也不用关注何时 remove listener,使用更方便。在此对 PreLoader 的作者@luckybilly表示感谢。