2017-10-27 2 views
0

Activity.runOnUiThread()はこれを持っている:RxJava即時のようなスケジューラ

if (Thread.currentThread() != mUiThread) { 
    mHandler.post(action); 
} else { 
    action.run(); 
} 

それは意味し、それは私はないです場合ハンドラにUIスレッドと投稿アクションにいる場合は、直ちにアクションを実行します。 私はこの機能のようなRxJava Schedulerを探しています。それは存在しますか?

+0

[RxJavaの永遠に繰り返されるタイマー、および再起動して、いつでも停止することができる]の可能な重複(https://stackoverflow.com/questions/38605090/rxjava-timer-that-repeats-forever-and-再起動と停止がいつでも可能) –

+0

すぐに実行する際の問題は、その 'Runnable'がメインスレッドでもスケジュールされている場合、StackOverflowErrorにつながる再帰を取得するか、単に放棄しないことです他のタスクのメインスレッド – akarnokd

+0

@akarnokd申し訳ありませんが、私はあなたを理解できません。あなたは例を挙げることができますか? –

答えて

1

はい簡​​単です。

getSomeObservable().observeOn(AndroidSchedulers.mainThread()) 

後.observeOn(AndroidSchedulers.mainThread())あなたは、観察を購読することができますし、コールバックは、メインスレッドに来ます。

.subscribe(new Subscriber<Object>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG,Thread.currentThread().getName()); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG,Thread.currentThread().getName()); 
       } 

       @Override 
       public void onNext(Object o) { 
        Log.i(TAG,Thread.currentThread().getName()); 
       } 
      }); 
+0

'AndroidSchedulers.mainThread' [常に投稿します](https://github.com/ReactiveX/RxAndroid/blob/2.x/rxandroid/src/main/java/io/reactivex/android/schedulers/HandlerScheduler.java# L72)、 'schedule'呼び出しがメインスレッド上にあっても。 – akarnokd

+0

はいわかります。 Observable.justであるかもしれません。私はすぐに行動することを知っているので、スイートになります。 –

+0

'just'は特定のスケジューラーでは実行されません。サブスクリプション/監視をメインスレッドに移すことができる演算子が必要です。 – akarnokd

関連する問題