在队列中调用Asynctask

时间:2017-10-18 10:52:36

标签: android android-asynctask

我正在开发一款应用,并希望将一些数据发送到服务器。当我发送给服务器的更新是定期的时,我能够将数据发送到服务器。

但现在用户互动了。我必须向服务器发送一个或多个呼叫。我不能跳过并省略对服务器的任何调用。假设以下情况:

案例:

假设我点击了一个按钮我启动了一个将一些数据放在服务器上的asyntask,假设需要5到6秒。但是如果用户多次按下按钮,我想触发多个asyntask。让我假设他连续7次按下按钮。所以7 AsyncTask必须一个接一个地在队列中运行。

我听说过调度程序和所有其他人,但我无法理解如何使用asynctask来处理它们。

可能的解决方案:我可以禁用按钮,直到并且除非第一次异步任务未完成,但我真的不想这样做,因为根据要求和需要,我必须将异步任务称为很多时候用户按下按钮。

请帮助我,任何源代码将不胜感激。

注意:使用asynctask,我无需更新UI。

更新:

根据我的需要,我想要使用特定数据对asynctask进行排队,并且必须在上一个任务完成时自动运行,如果用户退出应用程序,它应该继续运行,直到并且除非它完成所有排队的asynctask的执行。

1 个答案:

答案 0 :(得分:1)

  

假设他连续7次按下按钮。所以7 AsyncTask必须一个接一个地在队列中运行。

根据您的应用定位的API,您可能根本不需要做任何特别的事情。 Official documentation reads:

  

执行顺序

     

首次引入时,执行了AsyncTasks   串行在一个后台线程上。从DONUT开始,这是   更改为允许多个任务运行的线程池   平行。从HONEYCOMB开始,任务在单个上执行   线程,以避免由并行执行引起的常见应用程序错误

因此,从Android 3.0开始execute()就是您真正需要的,这意味着除非您支持该平台的古老版本,否则您应该默认看到串行执行。

或者,您可以删除AsyncTask,转而使用一个接一个地执行的IntentService。