2017-10-18 63 views
2

我正在开发一个应用程序,并希望将一些数据发送到服务器。当我发送给服务器的更新是定期的时,我能够将数据发送到服务器。在队列中调用Asynctask

但现在它在用户交互。我必须向服务器发送一个或多个呼叫。我不能跳过并忽略对服务器的任何呼叫。只是假设下面的情况:

案例:

让说,我有它的点击一个按钮,我推出一个asyntask是把服务器上的一些数据,让想这需要5到6秒。但是我想要触发多个asyntask,如果用户多次按下按钮。假设他连续按下7次按钮。所以7 AsyncTask必须依次运行在一个队列中。

我听说过关于schedular和所有其他人,但我无法理解如何使用asynctask与他们一起工作。

可能的解决办法:我可以禁用按钮之前,除非第一异步任务还没有完成,但我真的不想这样做,因为根据要求和需要我得叫异步任务多次用户按下按钮。

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

注意:使用asynctask我没有任何更新UI。

更新:

下我需要

我要排队与特定数据的AsyncTask,当上一个任务完成后必须自动运行,如果用户退出应用程序应该继续运行之前,除非它完成所有排队的asynctask的执行。

+0

你想同时运行吗? –

+0

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

+0

然后你必须在你的问题中加入这些东西。请编辑你的问题 –

回答

1

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

根据您的应用程序目标API,您可能根本不需要做任何特殊的事情。 Official documentation reads:

执行

当首次引入的顺序,分别AsyncTasks在单个后台线程执行 串联。从DONUT开始,这是 更改为线程池,允许多个任务在 并行运行。 Honeycomb的开始,任务是在单个 线程执行,以避免因并行执行常见的应用错误

因此从Android 3.0的​​开始是你所需要的真正的,这意味着除非你支持的平台古老的版本你应该默认看到串行执行。

或者,您可以放弃AsyncTask以支持依次执行的IntentService。

+0

这很好。我的最低支持是软糖豆 –

+0

我已经测试过它,让它一起运行所有的aysnctask让我说如果我点击按钮两次,我已经注意到,他们得到挂断,需要更多的时间,然后通过 –

+0

不知道什么'超过平常'的意思和你如何衡量它,但问题是如何逐一运行AsyncTasks。我就这样回答。另外,没有什么能够阻止你编写自己的队列来管理提供的解决方案(inl.intentService)不适合你的需求。但这不符合你目前的问题。 –