2016-11-10 9 views
2

どのように使用RxJava更新UI Androidで1秒ごとに? 私はこのような何かやろうとしている:RxJava Thread.sleep別のスレッド

for (int i = 0; i <10 ; i++) { //test 
       rx.Observable.just(getSleep()) 
         .subscribeOn(Schedulers.newThread()) 
         .observeOn(AndroidSchedulers.mainThread()) 
         .subscribe(v->updateTime());//update textView 
     } 

    private <T> int getSleep() { 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return 0; 
    } 

しかしのThread.sleep()は、UIスレッドでやって。 私は間違って何をしますか?

答えて

2
Observable.interval(1, TimeUnit.SECONDS) //emits item every second 
      .observeOn(AndroidSchedulers.mainThread()) //switches thread from computation (interval's default) to UI 
      .subscribe(i -> updateUI()); //update your textView 
+0

この' onPause() 'の登録を解除し、' onResume() 'を再登録することを忘れないでください。 –

1
rx.Observable.just(getSleep()) 
        .subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(v->updateTime());//update textView 

それはあなたのコードは、UIスレッドで実行されている場合は、getSleep()は、UIスレッドで実行されます

int stuff = getSleep(); 
rx.Observable.just(stuff) 
        .subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(v->updateTime());//update textView 

ようなものです。電話を延期する必要があります(たとえば、fromCallableを使用)。

 rx.Observable.fromCallable(() -> getSleep()) 
        .subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(v->updateTime());//update textView 
+0

私はストップウォッチのような何かをしようとしています。 'fromCallable'は状況を必要に応じて修正していません( –