Если вы посмотрите документы для View.post
, то есть некоторая соответствующая информация:
Этот метод можно вызывать извне потока пользовательского интерфейса, только когда
этот вид прикреплен к окну.
Поскольку вы делаете это в onCreate
, вполне вероятно, что иногда ваш View
еще не будет прикреплен к окну. Вы можете проверить это, переопределив onAttachedToWindow
и добавив что-то в журналы, а также войдя в систему при публикации. Вы увидите, что, когда сообщение не удается, почтовый звонок происходит до onAttachedToWindow
.
Как уже упоминалось, вы можете использовать Activity.runOnUiThread
или предоставить свой собственный обработчик. Однако, если вы хотите сделать это непосредственно из самого View
, вы можете просто получить обработчик View
:
view.getHandler().post(...);
Это особенно полезно, если у вас есть пользовательское представление, которое включает в себя какую-то фоновую загрузку. Также добавлен бонус, заключающийся в том, что вам не нужно создавать новый отдельный обработчик.