我有一个长时间运行的应用。我正在使用AsyncTask。在它的onPostExecute()中,我调用了一个修改某些视图的函数。我在修改10个视图的第5个视图上调用setEnabled时收到此错误。它很少发生,从用户那里得到奇怪的错误报告。
显然是一个多线程问题。但我认为onPostExecute()总是在UI线程上运行?可能是UI线程突然变为另一个线程吗?
堆栈追踪:
生成以下异常: android.view.ViewRoot $ CalledFromWrongThreadException:只有原始版本 创建视图层次结构的线程可以触及其视图。
---------指令堆栈跟踪---------
答案 0 :(得分:0)
但我认为onPostExecute()总是在UI线程上运行?
是的,确实如此。 Per Selvin的评论,AFAIK,如果你试图从另一个线程创建一个AsyncTask
,它就会失败。
可能是UI线程突然变为另一个线程吗?
没有。更有可能的是,您不小心在doInBackground()
中更改了UI的代码路径。
如果您有一个完整的堆栈跟踪显示您从onPostExecute()
中执行的逻辑中获得此异常,请编辑您的问题并粘贴到该堆栈跟踪中。