/ / Jak wykonywać i odbierać wyniki z AsyncTasks poza głównym wątkiem? - Android, wielowątkowość, android-asynktask

Jak wykonywać i odbierać wyniki z AsyncTasks poza głównym wątkiem? - Android, wielowątkowość, android-asynktask

Mam kilka AsyncTasks i ich wywołania zwrotne (interfejsy listener), których nie chcę mieć nic wspólnego z wątkiem interfejsu użytkownika.

Czytanie odpowiedzi tutaj: Android: czy AsyncTask może powrócić w innym wątku niż wątek interfejsu użytkownika? Pozostaje mi wrażenie, że mogę uruchomić AsyncTasks tylko z wątku interfejsu użytkownika, co oznacza, że ​​wywołania zwrotne wywoływane przez ich metody onPostExecute będą również w głównym wątku.

Jak przenieść całą tę logikę z wątku interfejsu użytkownika?

Odpowiedzi:

3 dla odpowiedzi № 1

Po pierwsze, na podstawie pewnych problemów, które miałem wcześniej, próbując uruchomić AsyncTasks w IntentService, myślę, że twoje założenie, że nie możesz uruchomić AsyncTask z wątku innego niż UI, jest fałszywe.

Problem, który znalazłem przy uruchamianiu AsyncTaskspoza wątkiem UI nie jest, że nie działają ani nie powodują awarii, ale funkcja onPostExecute () nie uruchamia się automatycznie w głównym wątku UI po zakończeniu innych operacji. Nie polecałbym tego robić, ale prawdopodobnie mógłbyś, gdybyś chciał.

Ale cały powód istnienia AsyncTasks istniejepo prostu mieć łatwy sposób uruchomienia kodu z wątku UI, a następnie móc zmieniać rzeczy interfejsu użytkownika po jego zakończeniu. Więc jeśli nie chcesz nic robić z nicią UI, nie powinieneś potrzebować używać AsyncTask w ogóle .Jeśli nie musisz uruchamiać żadnego kodu w wątku UI, możesz po prostu użyć czegoś takiego:

new Thread(new Runnable() {
public void run() {
//Do your stuff
}
}).start();