У меня есть приложение в производстве в течение нескольких недель, используя ACRA, и у меня были ошибки с ошибкой, пока не появилась одна странная ошибка.
У меня есть:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
исходящий из этого метода в трассировке стека (retraced):
at my.app.CountdownFragment$1.void onPostExecute(java.lang.Object)(SourceFile:1)
И это соответствующий фрагмент исходного кода:
private void addInstructionsIfNeeded() {
if (S.sDisplayAssist) {
new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
return null;
}
/*
* runs on the ui thread
*/
protected void onPostExecute(String result) {
Activity a = getActivity();
if (S.sHelpEnabled && a != null) {
in = new InstructionsView(a.getApplicationContext());
RelativeLayout mv = (RelativeLayout) a
.findViewById(R.id.main_place);
mv.addView(in.prepareView());
}
};
}.execute("");
}
}
Где addInstructionsIfNeeded()
вызывается из отправленного обработчиком сообщения (UAD thead).
-
onPostExecute()
работает в потоке пользовательского интерфейса, поэтому почему у меня есть "неправильный поток"? - Этот код работает уже на более чем 150 устройствах и более 100000 раз (согласно Flurry) и никогда не имел этой ошибки.
- Исходным устройством является Samsung SGH-I997, работающий с SDK 4.0.4.
Мой вопрос: как это могло быть?
ИЗМЕНИТЬ: Все это происходит в фрагменте