Я конвертирую свой код с Handler на AsyncTask. Последний хорош в том, что делает - асинхронные обновления и обработка результатов в основном потоке пользовательского интерфейса. Мне неясно, как обрабатывать исключения, если в AsyncTask#doInBackground что-то пойдет не так.
Я использую обработчик ошибок и отправляю ему сообщения. Он работает нормально, но это «правильный» подход или есть лучшая альтернатива?
Также я понимаю, что если я определяю обработчик ошибок как поле Activity, он должен выполняться в потоке пользовательского интерфейса. Однако иногда (очень непредсказуемо) я получаю исключение, в котором говорится, что код, запускаемый из Handler#handleMessage, выполняется в неправильном потоке. Должен ли я вместо этого инициализировать обработчик ошибок в Activity#onCreate? Помещение runOnUiThread в Handler#handleMessage кажется излишним, но выполняется очень надежно.