【问题标题】:Android AsyncTask crashAndroid AsyncTask 崩溃
【发布时间】:2012-12-01 23:49:50
【问题描述】:

我正在扩展 AsyncTask 并在我的 doInBackground() 中使用 findViewById 获得一个按钮视图,当我调用 button.performClick() 时,我的应用程序崩溃了。

知道为什么吗?

这是日志猫:

E/AndroidRuntime(604): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(604): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(604):  at android.os.AsyncTask$3.done(AsyncTask.java:278)
E/AndroidRuntime(604):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime(604):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime(604):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime(604):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime(604):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
E/AndroidRuntime(604):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
E/AndroidRuntime(604):  at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime(604): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
E/AndroidRuntime(604):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
E/AndroidRuntime(604):  at android.view.ViewRootImpl.playSoundEffect(ViewRootImpl.java:3610)
E/AndroidRuntime(604):  at android.view.View.playSoundEffect(View.java:13103)
E/AndroidRuntime(604):  at android.view.View.performClick(View.java:3510)

【问题讨论】:

    标签: android multithreading crash android-asynctask


    【解决方案1】:

    我正在扩展 AsyncTask 并在我的 doInBackground() 中使用 findViewById 获得一个按钮视图,当我调用 button.performClick() 时,我的应用程序崩溃了。

    在 AsyncTasks 中,您只能在onProgressUpdate()onPostExecute() 或其他有权访问 UI 线程的方法中使用 UI 元素,例如按钮。只需将调用button 的代码移动到可接受的方法中即可。

    【讨论】:

    • @Sam : 还有 onPreExecute() 。唯一不能修改视图的方法是 doInBackground()
    • @Houcine 是的,还有更多我没有列出的方法,但它们记录在AsyncTask 中,供任何感兴趣的人使用。
    • @Sam :而且...您可以将自己的方法添加到扩展 AsyncTask 的类中,它们也可以访问 UI。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多