Ami*_*jad 15 android ui-thread android-service rx-java rx-android
我有一个绑定服务,负责下载文件,因此它知道下载状态/进度.UI(片段或活动)必须显示/更新服务的下载进度.
实际上我认为常用的方法是使用BroadcastReciever或CallBack来自Activity.但我听说过使用RxJava(ReactiveX编程)和中介类(以及Dagger将其注入服务和活动),如下所述.
所以我的问题是如何使用这些东西来处理RxJava?任何代码示例?有没有比使用意图更有效的方法?
资源: 从Service更新UI的有效方式比意图更新?[见第一个答案更新]
需要RxJava/RxAndroid
1)观察员2)观察员3)订阅
你需要把你的计划1,2,3,
OBSERVABLES去了创建数据的地方,所以在你的情况下服务
观察者去了需要消费(或显示)数据的地方,这就是你的 ACTIVITY
订阅去任何地方,你有机会可观察和观测,所以让我们使用 ACVITITY为
程序和代码:
首先,像这样在服务中准备你的OBSERVABLE
class MyService extends Service {
static PublishSubject<String> data = PublishSubject.create();
@Override
public void onStarCommand(Intent intent,int i, int j){
# DO THIS ANYWHER WHERE YOU GENERATE DATA
data.onNext("Hello");
}
public static Observable<String> getObservable(){
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
其次,在Activity的onCreate中准备你的OBSERVER(和OBSERVABLE)
Observable<String> observable = MyService.getObservable();
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted: ");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: ",e);
}
@Override
public void onNext(String text) {
Log.d(TAG, "DATA reveived here: "+text);
}
};
Run Code Online (Sandbox Code Playgroud)
最后在Activity中链接OBSERVER和OBSERVABLE,否则Observable将不响应,在onCreate中再次使用它
observable.subscribe(observer);
Run Code Online (Sandbox Code Playgroud)
DONE,现在,即使使用onNext()从Service触发数据,数据也会到达Activity
Binder当某些东西绑定到您时您使用的子类可以Service公开一个返回Observable发出进度数据的方法。
Activity这种方法需要注意的是,当实例不再有效时,您需要释放两个资源:服务连接和可观察订阅。
| 归档时间: |
|
| 查看次数: |
6821 次 |
| 最近记录: |