OnCreate 中的 AsyncTask 在运行时失败,如何在 Android 中避免这种情况?

Posted

技术标签:

【中文标题】OnCreate 中的 AsyncTask 在运行时失败,如何在 Android 中避免这种情况?【英文标题】:AsyncTask in OnCreate fails at runtime, how can this be avoided in Android? 【发布时间】:2010-12-06 00:19:10 【问题描述】:

我有一个以 AsyncTask 开头的活动来检查与我的服务器 api 的连接。 由于这不应该在 UI 线程中运行,因此我为此创建了 AsyncTask。

问题是当我启动 Asynctask 的后台进程时出现运行时异常。

我怎样才能避免这种情况?

来自日志:

10-12 14:18:56.476: ERROR/androidRuntime(1523): java.lang.RuntimeException: An error occured while executing doInBackground()
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:234)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:258)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.util.concurrent.FutureTask.run(FutureTask.java:122)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at java.lang.Thread.run(Thread.java:1058)
10-12 14:18:56.476: ERROR/AndroidRuntime(1523): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10-12 14:18:56.476: ERROR/AndroidRuntime(1523):     at android.os.Handler.<init>(Handler.java:121)

【问题讨论】:

【参考方案1】:

您是否在 UI 线程以外的线程中创建 AsyncTask?如果没有看到您正在使用的代码,这几乎是不可能调试的。

【讨论】:

【参考方案2】:

从上面的异常中,我猜你正在做一些依赖于doInBackground 中的处理程序的事情,这应该是在单独的线程中运行。请发布您的该功能的代码。

【讨论】:

以上是关于OnCreate 中的 AsyncTask 在运行时失败,如何在 Android 中避免这种情况?的主要内容,如果未能解决你的问题,请参考以下文章

在 onCreate() 期间通过 AsyncTask 加载数据

Android AsyncTask 不运行

AsyncTask中的IOException

Android中的AsyncTask是如何执行的

即使使用取消方法也无法取消 AsyncTask 中的 doInBackground 进程

android中使用AsyncTask遇到的变态问题求解答