我想使用 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()?
提前致谢!