Android :получил исключение CalledFromWrongThreadException в onPostExecute()-Как это могло быть?

У меня есть приложение, работающее несколько недель с использованием ACRA, и у меня не было ни одной ошибки, пока сегодня не сообщили об одной странной ошибке.

У меня есть:

    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

исходящий из этого метода в трассировке стека (восстановленный):

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()вызывается из сообщения, отправленного обработчиком (Пользовательский интерфейс заголовок ).

  • onPostExecute()работает в потоке пользовательского интерфейса, так почему же у меня "неправильный поток"?
  • Этот код уже работал на более чем 150 устройствах и более 100 000 раз (согласно Flurry ), и никогда не возникало этой ошибки.
  • Исходным устройством является Samsung SGH -I997 с SDK 4.0.4

Мой вопрос: :Как это может быть?

РЕДАКТИРОВАТЬ: Это все происходит во фрагменте

23
задан Amir Uval 3 May 2012 в 07:19
поделиться