Я столкнулся со странной проблемой. В моем коде есть широковещательный приемник, который делает это в onReceive():
view.post(new Runnable() {
@Override
public void run() {
view.refreshUI();
}});
Я не понимаю, почему этот код представляет android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Я уже отправляю вызов refreshUI()
внутри Runnable
на view
. Так как же он не работает в UI-потоке?
Еще одно странное наблюдение заключается в том, что служба отправки широковещательной рассылки даже не отправила широковещательную рассылку в случае, когда я вижу этот сбой. Я знаю это, потому что в logcat записываются операторы как на стороне отправителя, так и на стороне получателя. Но один из них присутствует до крушения.
Чтобы дать некоторый фон, приведенный выше код написан внутри платформы Android для защиты клавиатуры (ИЛИ экрана блокировки). Я работаю над исходным кодом Android 4.3, адаптированным для нашего оборудования/платы.
Вышеупомянутый код присутствует в том виде, в каком он был в течение последних 1,5 лет. Проблема была замечена только дважды за последние несколько месяцев, хотя здесь ничего не изменилось.
Я уже прошел через выполнение на UIThread и отправку в view, по-прежнему получают CalledFromWrongThreadException и другие подобные вопросы, но в основном они касаются AsyncTasks
. У меня нет AsyncTask
в моем случае.
Есть предположения?