2
シンプルな機能テストをしましたが、私は奇妙な問題に直面しました。RxJavaとAndroidサービス
機能テストは次のとおりです。アクティビティでサービスを開始し、最後にアクティビティでメッセージを受信したときに、サービスでRxJavaとboradcastを使用してメッセージをアクティビティに送信します。
メッセージ送信Intent i = new Intent(this, StartIntentService.class);
startService(i);
:
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");
}
}
}
期待される結果は次のとおり:
@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);
});
}
メッセージ受信すべての数は、3で割り切れることができるが、しかし、サービスを開始
実際の結果は:すべての数字は-1です。
メソッドの間隔をrangeに置き換えるか、メソッド:.observeOn(AndroidSchedulers.mainThread())を追加すると、すべてうまく行きます。
なぜですか? onReceive
にあなたが(代わりgetLongExtra
の)getIntExtra
と値を抽出しながら
**ありがとうございます**。 – Sawyer