我做了一个简单的功能测试,但是遇到了一个奇怪的问题。
功能测试是:在活动中启动服务,然后在服务中使用RxJava和boradcast向活动发送消息,最后在活动中接收消息。
开始服务:
Intent i = new Intent(this, StartIntentService.class);
startService(i);
发送消息:
@Override
protected void onHandleIntent(Intent intent) {
Observable.interval(0, 500, TimeUnit.MILLISECONDS)
.filter(integer -> {
return (integer < 400) && (integer % 3 == 0);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(integer -> {
mIntent.putExtra("num", integer);
sendBroadcast(mIntent);
});
}
收到消息:
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTIVITY_SERVICE_INTERACTIVE.equals(intent.getAction())) {
int res = intent.getIntExtra("num", -1);
mResTv.append(res + "" + "\t\t\t\t");
}
}
}
预期结果是:所有数字都可以被3整除,但实际结果是:所有数字都是-1。
如果我用范围替换方法间隔,或者我添加一个方法:.observeOn(AndroidSchedulers.mainThread()),一切顺利。
为什么?
答案 0 :(得分:2)
Observable.interval
会发出Long
个值,而在onReceive
中,您会使用getIntExtra
(而不是getLongExtra
)提取值。因此getIntExtra
会返回您指定为默认值(-1
)的值。
Observable.range
会发出Integer
个值,因此一切都按预期进行。