我有一个长期运行的操作的应用程序。我正在使用AsyncTask。在其onPostExecute()我认为这种修改一些视图的功能。我上被修改10次第五届观呼唤的setEnabled收到此错误。它很少发生,从用户那里得到奇怪的错误报告。
显然,一个多线程的问题。但我认为onPostExecute()总是在UI线程上运行?难道是UI线程突然变成另一个线程?
堆栈跟踪:
产生以下异常: android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次可以触摸其观点原来 线程。
---------指令堆栈跟踪---------
- android.view.ViewRoot.checkThread(ViewRoot.java:3041)
- 机器人。 view.ViewRoot.invalidateChild(ViewRoot.java:647)
- android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673)
- android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
- 机器人.view.View.invalidate(View.java:5255)
- android.view.View.invalidateDrawable(View.java:7293)
- android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:300) 8. android.graphics.drawable.DrawableContainer.selectDrawable(DrawableContainer的.java:227) 9. android.graphics.drawable.StateListDrawable.onStateChange(StateListDrawable.java:99)
- android.graphics.drawable.Drawable.setState(Drawable.java:400)
- android.view .View.drawableStateChanged(View.java:7374)
- android.view.ViewGroup.drawableStateChanged(ViewGroup.java:3357)
- android.widget.FrameLayout.drawableStateChanged(FrameLayout.java:164)
- android.view.View.refreshDrawableState(View.java:7388)
- android.view.View.setEnabled(View.java:3147 )
- com.voltup.powermax.ac.a(ActivityAppUiProxy.java:383)
- com.voltup.powermax.cp.onPostExecute(ModeChange.java:1)
- android.os.AsyncTask.finish( AsyncTask.java:417)
实际上,它并未在UI线程上调用,而是在创建AsyncTask的线程上调用。这就是为什么文档说:'任务实例必须在UI线程上创建。' – Selvin 2012-03-09 11:52:34