【发布时间】:2014-11-20 08:55:49
【问题描述】:
我遇到了以下无法解决的问题:
我有一个 IntentService,它在 onHandleIntent 方法中执行一些工作。除了此方法中的一些常见内容外,我还必须向后端发出请求并发送所需的信息。众所周知,onHandleIntent 方法在自己的线程中工作,并在执行最后一条命令的那一刻停止。在某些异步操作的情况下 - 结果可能会丢失,因此 google 建议仅在此方法中使用同步操作。
这是我的问题,我没有使用 subscribeOn 和 observeOn,但看起来我的方法在 sep 有效。线程,这对我来说不安全。
这是我的 onHandleIntent 方法的主体,带有 Retrofit(带有 rx.Observable)调用:
Log.d(TAG, "onHandleIntent | started");
...
getAPI().addItem(item).timeout(AppConfig.NETWORK_TIMEOUT, TimeUnit.SECONDS).doOnNext(new Action1<Response<String>>() {
@Override
public void call(Response<String> response) {
//some job
Log.d(TAG, "doOnNext || call");
}
}).retryWhen(new RetryWithSessionRefresh()).subscribe(new Observer<Response<String>>() {
@Override
public void onCompleted() {
Log.d(TAG, "Observer onCompleted");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "Observer onError");
}
@Override
public void onNext(Response<String> response) {
Log.d(TAG, "Observer onNext");
}
});
...
Log.d(TAG, "onHandleIntent | finished");
改造方法getItem(item)为:
rx.Observable<Response<String>> addItem(@Body ArrayList<Item> item);
最后的结果是:
- 11-20 00:49:03.512 onHandleIntent |开始
- 11-20 00:49:03.517 onHandleIntent |完成
- 11-20 00:49:04.549 doOnNext ||打电话
- 11-20 00:49:04.549 观察者 onNext
- 11-20 00:49:04.550 观察者已完成
那么,问题是如何让它在同一个线程中工作?
【问题讨论】:
标签: android multithreading intentservice retrofit rx-java