2016-11-09 2 views
0

Ich versuche derzeit, rxandroid in meiner App zu implementieren, um einen Adapter zu aktualisieren. Das einzige Problem ist, dass wenn ich die adapter.notiyDataSetChanged() aufrufen die App einfriert, bis die Methode beendet ist.Abonnent im neuen Thread ausführen rxandroid

das ist, was ich bisher getan habe:

private Subscriber<? super Object> subscriber = new Subscriber<Object>() { 

    @Override 
    public void onCompleted() { 

    } 

    @Override 
    public void onError(Throwable e) { 

    } 

    @Override 
    public void onNext(Object o) { 

      adapter.notifyDataSetChanged(); 


     } 
    } 
}; 

...

und i in der onResume

@Override 
public void onResume() { 
    super.onResume(); 
    MObservable.getInstance().getObservable() 
      .delay(2000,TimeUnit.MILLISECONDS,Schedulers.trampoline()) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(subscriber); 
} 

und die Abmelde innen onPause führen Sie dann abonnieren.

Die Ereignisse werden in einem Dienst ausgelöst, der den Prozess mehrmals pro Minute anzeigt.

Endlich ist meine Frage: Gibt es eine Möglichkeit, die App nicht einzufrieren, während die Notify-Methode aufgerufen wird? ist die notify, die auf einem neuen thread in meinem code ausgeführt wird oder das subscribeOn macht immer noch notify läuft auf dem haupt thread (wie ich vermute).

Vielen Dank im Voraus

Antwort

0

Wahrscheinlich ist das Problem mit Schedulers.trampoline() Fragmente.

Aus Dokumentation von Schedulers.trampoline():

Erstellt und gibt einen Scheduler, die Warteschlangen auf dem aktuellen Thread arbeiten ausgeführt werden, nachdem vervollständigt die aktuelle Arbeit.

Auf Android bedeutet es die aktuelle Thread von Haupt Thread.

Entfernen Sie diese Parameter und sehen Sie, wie sich Observable verhält.

Verwandte Themen