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