Skip to content

Commit 87b9ceb

Browse files
committed
add support for remove DataListener dynamically
1 parent ab66563 commit 87b9ceb

14 files changed

Lines changed: 72 additions & 20 deletions

File tree

README-zh-CN.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Activity打开之前就预加载数据,在Activity的UI布局初始化完成
2222

2323
## 典型应用
2424

25+
1. 在Application.onCreate中加载地址数据,在需要用到地址的页面中获取预加载的数据
2526
1. 在启动页中预加载app主页所需的数据,减少用户等待时间
2627
2. startActivity之前就开始预加载,UI初始化完成后显示预加载的数据
2728
3. 复杂页面(UI初始化耗时较多的页面)内部在UI初始化开始之前预加载数据,UI初始化完成后显示预加载的数据
@@ -34,6 +35,7 @@ Activity打开之前就预加载数据,在Activity的UI布局初始化完成
3435
- 支持自定义线程池
3536
- 支持一个加载任务(DataLoader)对应多个监听器(DataListener)
3637
- 支持为一个Activity配置多个预加载任务
38+
- 支持后续添加/移除监听器(DataListener)
3739

3840
![image](image/PreLoader.png)
3941

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Continuous optimization, welcome watch, star!
4545

4646
- support multiple preload tasks for an Activity
4747

48+
- support for add/remove listener dynamically
4849

4950
![image](image/PreLoader.png)
5051

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@ dependencies {
3838
compile fileTree(dir: 'libs', include: ['*.jar'])
3939
compile 'com.android.support:appcompat-v7:25.0.1'
4040
// compile project(':pre-loader')
41-
compile 'com.billy.android:pre-loader:0.1.0'
41+
compile 'com.billy.android:pre-loader:1.0.0'
4242
}

changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
## 2018-01-01 V1.0.0 add support for remove DataListener dynamically
2+
13
## 2018-01-01 V0.1.0 first commit

pre-loader/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ ext {
3737
siteUrl = 'https://github.com/luckybilly/PreLoader'
3838
gitUrl = '[email protected]:luckybilly/PreLoader.git'
3939

40-
libraryVersion = '0.1.0'
40+
libraryVersion = '1.0.0'
4141

4242
developerId = 'billy'
4343
developerName = 'billy'

pre-loader/src/main/java/com/billy/android/preloader/PreLoader.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ public static <T> boolean listenData(int id, DataListener<T> dataListener) {
9999
return PreLoaderPool.getDefault().listenData(id, dataListener);
100100
}
101101

102+
public static <T> boolean removeListener(int id, DataListener<T> dataListener) {
103+
return PreLoaderPool.getDefault().removeListener(id, dataListener);
104+
}
105+
106+
public static <T> boolean exists(int id) {
107+
return PreLoaderPool.getDefault().exists(id);
108+
}
109+
102110
/**
103111
* re-load data for all listeners
104112
* @return success

pre-loader/src/main/java/com/billy/android/preloader/PreLoaderPool.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import static com.billy.android.preloader.PreLoader.logger;
1111

1212
/**
13-
* pool for HandlerThread
13+
* pool for pre-load Worker
1414
* @author billy.qi
1515
*/
1616
public class PreLoaderPool {
@@ -49,6 +49,10 @@ private <T> int preLoadWorker(Worker<T> worker) {
4949
return id;
5050
}
5151

52+
public boolean exists(int id) {
53+
return workerMap.containsKey(id);
54+
}
55+
5256
public boolean listenData(int id) {
5357
Worker worker = workerMap.get(id);
5458
return worker != null && worker.listenData();
@@ -64,6 +68,16 @@ public <T> boolean listenData(int id, DataListener<T> dataListener) {
6468
return false;
6569
}
6670

71+
public <T> boolean removeListener(int id, DataListener<T> dataListener) {
72+
try {
73+
Worker<T> worker = workerMap.get(id);
74+
return worker != null && worker.removeListener(dataListener);
75+
} catch(Exception e) {
76+
logger.throwable(e);
77+
}
78+
return false;
79+
}
80+
6781
public boolean refresh(int id) {
6882
Worker worker = workerMap.get(id);
6983
return worker != null && worker.refresh();

pre-loader/src/main/java/com/billy/android/preloader/PreLoaderWrapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public boolean listenData(DataListener<T> dataListener) {
4949
return worker.listenData(dataListener);
5050
}
5151

52+
public boolean removeListener(DataListener<T> dataListener) {
53+
return worker.removeListener(dataListener);
54+
}
55+
5256
/**
5357
* re-load data for all listeners
5458
* @return success

pre-loader/src/main/java/com/billy/android/preloader/State.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.billy.android.preloader.interfaces.DataListener;
55

66
/**
7+
* state of the pre-loader
78
* @author billy.qi
89
*/
910
interface State {
@@ -21,18 +22,25 @@ interface State {
2122
boolean destroy();
2223

2324
/**
24-
* 开始监听加载的数据(如果已经有数据则立即开始处理数据)
25+
* start to listen data
2526
* @return
2627
*/
2728
boolean listenData();
2829

2930
/**
30-
*
31-
* @param listener
32-
* @return
31+
* start to listen data with a listener
32+
* @param listener listener of data
33+
* @return true if success
3334
*/
3435
boolean listenData(DataListener listener);
3536

37+
/**
38+
* remove listener
39+
* @param listener listener of data
40+
* @return true
41+
*/
42+
boolean removeListener(DataListener listener);
43+
3644
/**
3745
* data load finished by HandlerThread
3846
* @return

pre-loader/src/main/java/com/billy/android/preloader/StateBase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ public boolean listenData(DataListener listener) {
4646
return false;
4747
}
4848

49+
@Override
50+
public boolean removeListener(DataListener listener) {
51+
log("removeListener");
52+
return worker.doRemoveListenerWork(listener);
53+
}
54+
4955
@Override
5056
public boolean dataLoadFinished() {
5157
log("dataLoadFinished()");

0 commit comments

Comments
 (0)