【发布时间】:2012-10-31 17:29:12
【问题描述】:
我想使用 AsyncTask 通过服务器更新我的 db4o。在 doInBackground 方法中,我连接到服务器,更新 db4o,并安排一个挂起的意图。不修改 UI 或显示任何 toast。
最初,我遇到以下错误:
Can't create handler inside thread that has not called Looper.prepare()
添加 Looper.prepare() 后,工作正常,但仅适用于五次更新 (AsyncTask)。我读过这个话题:AsyncTask threads never die (Android),我现在没有失败。当我抛出第六次更新时,应用程序崩溃了:
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.RuntimeException: Only one Looper may be created per thread
at android.os.Looper.prepare(Looper.java:74)
(...)
我在文档中读到我需要 Looper.loop(),但是这样,应用程序崩溃了..
例子:
protected Integer doInBackground(Void... params) {
Looper.prepare();
update = new Update();
update.checknewObjects();
update.deleteOldObjects();
update.updateObjects();
Looper.loop();
}
为什么需要 Looper? 为什么应用程序在五次更新后崩溃? 我可以在哪里安排 Looper.loop()?
提前致谢!
【问题讨论】:
-
“引起:java.lang.RuntimeException:每个线程只能创建一个 Looper”检查您是否在同一线程上使用 Looper 的次数不超过一次。如果您在线程内使用处理程序(主应用程序线程有一个 Looper),通常需要一个 Looper。 mindtherobot.com/blog/159/…
标签: java android android-asynctask handler looper