2016-11-10 2 views
2

Wie mit RxJava Update jede Sekunde in Android? Ich versuche, so etwas zu tun:RxJava Thread.sleep in einem anderen Thread

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; 
    } 

Aber Thread.sleep() in UI-Thread zu tun. Was ich falsch machen?

Antwort

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

erinnern Sie sich, diese' onPause() 'abzumelden und' onResume() 'neu zu abonnieren –

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

es ist wie

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

Wenn Ihr Code wird in dem UI-Thread läuft dann getSleep() wird im UI-Thread ausgeführt werden. Sie müssen Ihren Anruf aufschieben (z. B. mit fromCallable).

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

Ich versuche, so etwas wie eine Stoppuhr zu tun. 'fromCallable' korrigierte die Situation nicht wie benötigt ( –

Verwandte Themen