Skip to content

Commit f5e3b5b

Browse files
committed
Add HandlerThreadScheduler which schedules actions on an Android Handler thread
1 parent 8df8e9a commit f5e3b5b

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package rx.concurrency;
2+
3+
import android.os.Handler;
4+
import rx.Scheduler;
5+
import rx.Subscription;
6+
import rx.operators.AtomicObservableSubscription;
7+
import rx.util.functions.Func2;
8+
9+
import java.util.concurrent.TimeUnit;
10+
11+
/**
12+
* Schedules actions to run on an Android Handler thread.
13+
*/
14+
public class HandlerThreadScheduler extends Scheduler {
15+
16+
private final Handler handler;
17+
18+
public HandlerThreadScheduler(Handler handler) {
19+
this.handler = handler;
20+
}
21+
22+
@Override
23+
public <T> Subscription schedule(final T state, final Func2<Scheduler, T, Subscription> action) {
24+
final AtomicObservableSubscription subscription = new AtomicObservableSubscription();
25+
final Scheduler _scheduler = this;
26+
27+
handler.post(new Runnable() {
28+
@Override
29+
public void run() {
30+
subscription.wrap(action.call(_scheduler, state));
31+
}
32+
});
33+
return subscription;
34+
}
35+
36+
@Override
37+
public <T> Subscription schedule(final T state, final Func2<Scheduler, T, Subscription> action, long delayTime, TimeUnit unit) {
38+
if (delayTime == 0) {
39+
return schedule(state, action);
40+
} else {
41+
final AtomicObservableSubscription subscription = new AtomicObservableSubscription();
42+
final Scheduler _scheduler = this;
43+
handler.postDelayed(new Runnable() {
44+
@Override
45+
public void run() {
46+
subscription.wrap(action.call(_scheduler, state));
47+
}
48+
}, unit.toMillis(delayTime));
49+
return subscription;
50+
}
51+
}
52+
}
53+
54+

0 commit comments

Comments
 (0)