gpt4 book ai didi

java - 为什么我的 AsyncTask 中需要一个 Looper?

转载 作者:行者123 更新时间:2023-11-29 09:09:30 25 4
gpt4 key购买 nike

我想使用 AsyncTask 通过服务器更新我的 db4o。在 doInBackground 方法中,我连接到服务器,更新 db4o,并安排一个 pendingintents。不修改 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)
(...)

five AsyncTask

我在文档中读到我需要 Looper.loop(),但是这样一来,应用程序就崩溃了..

例子:

protected Integer doInBackground(Void... params) {
Looper.prepare();

update = new Update();
update.checknewObjects();
update.deleteOldObjects();
update.updateObjects();
Looper.loop();
}

为什么我需要 Looper?为什么应用程序在五次更新后崩溃?我在哪里可以安排 Looper.loop()?

提前致谢!

最佳答案

如果你想使用 AsyncTask 所以使用它,你不应该将它与 Lopper 混合......

protected Integer doInBackground(Void... params) {}

已经在后台线程上工作,没有理由调用 Lopper,为什么?

如果您的应用程序需要进行某种长时间的计算,那么 AsyncTask 是非常好的工具,因为它提供了在 UI Thread 上工作并允许更新 的方法>UI 有一些工作进展,因为每个将使用您的应用程序的用户都应该知道该应用程序“正在做某事”(当它需要超过 2-5 秒时)。

而且它是通用的并且提供了一些好处。

如果您不需要更新UI,只需使用例如Handler

关于java - 为什么我的 AsyncTask 中需要一个 Looper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13140226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com