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