如何在安卓系统中实现后台队列?

3

我希望实现一个后台队列。它的工作方式是:当用户点击按钮时,将一个任务(需要时间完成)添加到队列中,队列应在后台线程上运行。如果用户再次点击按钮,则将另一个任务添加到队列中。后台线程逐个运行队列中的任务,直到队列为空。我希望只有1个后台线程处理任务。我可以使用什么样的Android功能?或者是否有示例?


创建需要处理的工作列表,一旦用户点击元素,启动AsyncTask,并跟踪该任务以了解其是否已完成工作。如果用户点击新项目,请将其添加到队列中。如果Async已完成,则启动一个新的任务。 - Daniel Bo
听起来你想要使用一个Handler - OneCricketeer
你可以使用Intent Service来排队任务 - 它使用单个工作线程。文档 - http://developer.android.com/reference/android/app/IntentService.html - Mark
2个回答

1

解决这个问题可能有几种方法。你可以尝试使用Executors等低级实现,但我建议尝试Evernote的android-job库。


我不会把使用AsyncTasks和执行器称为“低级”。这就是平台为此类任务提供的内容。我并没有对有用的库有什么意见,但是实现AsyncTasks相当简单。 - Robert Nekic
你说得没错,但是使用Executors可能对于每个人来说都不是那么明显,并且需要一些关于并发的知识,所以我不会说这很容易。此外,AsyncTask存在一些稳定性问题,没有错误处理,我会避免使用它。你建议的方法需要从头开始编写类似我上面链接的工具,并且“重新发明轮子”。如果你想使用SDK中的东西,我建议使用Job Scheduler,但它仅在最新的Android API中可用。 - Piotr Wittchen
重复造轮子?你可以创建一个继承AsyncTask的类来执行后台逻辑。调用Executors.newSingleThreadScheduledExecutor()来创建单线程执行器,并在执行每个AsyncTask时将其传递给它。这并不需要太多的工作。 - Robert Nekic

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接