Konwertuję mój kod z używania Handler
na AsyncTask
. Ten ostatni jest świetny w tym, co robi - asynchronicznych aktualizacjach i obsłudze wyników w głównym wątku interfejsu użytkownika. Nie jest dla mnie jasne, jak radzić sobie z wyjątkami, jeśli coś pójdzie nie tak AsyncTask#doInBackground
.
Sposób, w jaki to robię, to mieć obsługę błędów i wysyłać do niego komunikaty. Działa dobrze, ale czy jest to „właściwe” podejście, czy też jest lepsza alternatywa?
Rozumiem również, że jeśli zdefiniuję obsługę błędu jako pole działania, powinien on zostać wykonany w wątku interfejsu użytkownika. Jednak czasami (bardzo nieprzewidywalnie) otrzymuję wyjątek informujący, że kod wyzwalany z Handler#handleMessage
jest wykonywany w niewłaściwym wątku. Czy Activity#onCreate
zamiast tego powinienem zainicjować procedurę obsługi błędów ? Umieszczanie runOnUiThread
w programie Handler#handleMessage
wydaje się zbędne, ale działa bardzo niezawodnie.