2017-09-29 6 views
0

Mein Team hat eine neue Android-App entwickelt, die Room umfangreich nutzt.Android Room + AsyncTask

Ich bin unsicher, ob wir AsyncTask korrekt verwenden.

Wir mussten alle Aufrufe zum Einfügen/Aktualisieren/Löschen in AsyncTasks umbrechen, was zu einer großen Anzahl von AsyncTasks führt. Alle Anrufe in Room erfolgen von Hintergrunddiensten. Es gibt keinen direkten Zugang zu den Räumen von Aktivitäten oder Fragmenten - sie bekommen alles über LiveData.

Ein Beispiel Aufruf eine Zeile einzufügen:

AsyncTask.execute(() -> myModelDAO.insertInstance(myModel)); 

Mit diesem in der DAO:

@Insert 
void insertInstance(MyModel model); 

Antwort

3

die alle Anrufe in Zimmer sind von Hintergrunddienste

Dann Sie sollten AsyncTask nicht verwenden. AsyncTask ist nur für wenn Sie nach dem Hintergrund Arbeit arbeiten auf dem Hauptanwendungs-Thread tun wollen, und das ist fast nie der Fall mit einem Dienst. Verwenden Sie etwas anderes (Thread, Thread-Pool, RxJava usw.). Dies hat nichts spezifisch mit Room zu tun.

+0

einfügen Abfrage kann Android-UI-Thread sperren und es ist nicht erlaubt, dies zu tun. Wir müssen einfügen im Hintergrund async oder RX –

+0

@MunishThakur: Ja, aber es gibt viele Möglichkeiten, asynchrone Arbeit zu tun, die keine 'AsyncTask' beinhaltet. – CommonsWare

+0

Richtig, mit Lamba und Kotlin Unterstützung alles ist kürzer Event Async Aufgabe ist auch von einem Liner :-) AsyncTask.execute ({// Code zu exceute}) –

0
AsyncTask.execute(() -> myModelDAO.insertInstance(myModel)); 

wie falsche Suchen Sie Einfach Thema/Thread/Schedulers etc

0

Sie können einen Rückruf wie Consumer<List<object>>callback verwenden können. Zum Beispiel:

roomManger.getAllUsertById(user.getId(), this, new Consumer<List<User>>() { 
      @Override 
      public void accept(List<Product> listOfUser) { 
       users.addAll(listOfUser)}