我正在使用RXJava2在广播接收器内发送电子邮件,我想知道何时应该取消订阅该事件。该代码基本上是:如何取消订阅广播接收器中的RXjava呼叫
getSmsMmsObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> Timber.e(throwable, "Error sending mail."))
.map(smsMmsAddress1 -> {
smsMmsAddress = smsMmsAddress1;
return doInBackgroundSendEmail();
})
.map(stringSingle -> {
mMsgResponse = stringSingle;
this.done = true;
return deleteFile();
})
.subscribe(success -> {
if (success) {
Toast.makeText(context, "Message Status: " + mMsgResponse, Toast.LENGTH_LONG).show();
}
});
我什么时候取消(没有在onPause或在的onDestroy接收器),我如何知道什么时候的onReceive完了?接收者通过清单进行注册。我想过做一个复合观察,然后把它在subscribe()部分中处理掉。
compositeDisposable.add(
getSmsMmsObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> Timber.e(throwable, "Error sending mail."))
.map(smsMmsAddress1 -> {
smsMmsAddress = smsMmsAddress1;
return doInBackgroundSendEmail();
})
.map(stringSingle -> {
mMsgResponse = stringSingle;
this.done = true;
return deleteFile();
})
.subscribe(success -> {
if (success) {
Toast.makeText(context, "Message Status: " + mMsgResponse, Toast.LENGTH_LONG).show();
}
compositeDisposable.dispose();
})
);
尝试在服务中执行此操作,而不是接收方 –
我不行,我需要在收到文本时触发此操作。 –
你应该开始服务并发送文本给他。 另一个解决方案 - Android会在onReceive()调用后10秒内杀死接收者 –