Изправен съм пред странен проблем. Моят код има излъчващ приемник, който прави това в своя 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 и публикуване на изглед, все още получават CalledFromWrongThreadException и други подобни въпроси, но те се занимават предимно с AsyncTasks
. Нямам AsyncTask
в моя случай.
някакви мисли?