首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的AsyncTask中需要一个循环程序?

为什么我的AsyncTask中需要一个循环程序?
EN

Stack Overflow用户
提问于 2012-10-30 21:37:09
回答 3查看 5.1K关注 0票数 2

我想使用AsyncTask在服务器上更新我的db4o。在doInBackground方法中,我连接到服务器,更新db4o,并计划挂起意图。不修改UI或显示任何toast。

最初,我有以下错误:

代码语言:javascript
运行
复制
Can't create handler inside thread that has not called Looper.prepare() 

添加Looper.prepare()之后,可以正常工作,但仅适用于五个更新(AsyncTask)。我读过这个主题:AsyncTask threads never die (Android),现在我不认为它失败了。当我抛出第六个更新时,应用程序崩溃了:

代码语言:javascript
运行
复制
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(),但是在这个时候,应用程序崩溃了。

示例:

代码语言:javascript
运行
复制
protected Integer doInBackground(Void... params) {
    Looper.prepare();

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

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

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-30 22:10:20

如果你想使用AsyncTask所以使用它,你不应该把它和Lopper混在一起…

代码语言:javascript
运行
复制
protected Integer doInBackground(Void... params) {}

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

此外,它是通用的,这提供了一些好处。

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

票数 0
EN

Stack Overflow用户

发布于 2012-10-30 22:01:41

如果你想安排任务,你应该使用Timer & TimerTask,据我所知,我认为它们应该更适合你的需求。http://developer.android.com/reference/java/util/Timer.html

票数 0
EN

Stack Overflow用户

发布于 2012-10-31 17:29:13

在异步任务中,你不能在后台函数.it中使用循环,给出错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13140226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档