2012-10-29 48 views
1

如何创建一个AsyncTask,它在固定的时间间隔后继续运行。异步重复计划任务

例如,每隔5分钟从服务器获取数据,并通知通知以向调用者线程收到数据。我在论坛上搜索,但找不到多少。什么到目前为止,我已经收集是

1)UI线程执行

后打电话AsyncTask

2)UI线程访问onPrExecute执行

3)OnPostExecute的UI线程访问之前,我不需要向用户显示任何进度更新。此外,该任务将在应用程序关闭时被销毁。任何教程,这将有帮助

+0

我宁愿你使用服务。 –

+0

使用服务与警报服务经理 –

+0

@hotveryspicy:在这种情况下不会IntentService会更好?因为我不需要处理多个请求。也有任何教程 – Ankuj

回答

2

其他建议在评论。所以让我详细说明一下。

请勿使用AsyncTask。 INSTEAD只适用于IntentService。

  1. 做一个类继承IntentService
  2. 使用报警管理器来触发的意图与具体行动项目
  3. 自己的服务定义的接口和用于通知该服务的客户端。
  4. 维护客户端提供的这些接口实现对象的列表。
  5. in onHandleIntent(Intent intent)通过检查动作来识别调用。
  6. 直接在intentService上启动数据提取请求,作为使用工作线程工作,并在您维护的接口对象列表的最后调用更新代理中启动。

  7. 制定方法让活动注册并取消注册以监听这些更新。

  8. 这实际上是将它们提供的接口实现添加到您维护的列表中,并在调用注销时从其中删除。
  9. 确保活动在onResume中注册并在onPause中注销自己。
  10. 可以使用重复报警或在单次运行结束后再次启动报警。 我希望它能帮助:)
+1

Wont IntentService本身就能完成它。为什么我们需要Async TAsk? – Ankuj

+0

啊。是的,我怎么能忘记。不要使用AsyncTask。 IntentService能够做到这一点 – Javanator

+0

完美的解释。 +1 –

0

您可以安排在AsyncTask使用Timer.scheduleAtFixedRate固定利率重复。

+0

你知道Asyntask在UIThread上运行吗? –

+1

@hotveryspicy,那是不正确的。您需要调用execute()方法使其在自己的线程中运行,但您只能从循环线程(通常是主线程)调用此方法。 – Phil

+0

那就是我在运行Asyntask时所说的,如果用户与UI进行任何交互,那么用户会感觉到闪烁(这很糟糕)。 –

0

试试这个..

-更好地利用Service一次又一次地做这项工作。

- 现在,您可以使用绑定或取消绑定Service。如果您希望服务绑定到活动,则使用绑定服务否则使用解除绑定服务。

-如果甚至会更好使用IntentService,因为在这里你不需要任务继续运行,但一定时间后运行。

请参阅此链接:

http://mobile.tutsplus.com/tutorials/android/android-fundamentals-intentservice-basics/

0

我写了定期时间间隔触发AsyncTask S,不同之处在于他们坚持,即使当应用程序被关闭的应用程序。无论如何,这是我必须做的:

  1. 创建PendingIntent(通过getBroadcast()),里面有包含一个动作一个Intent
  2. PendingIntent提供给系统的AlarmManager并设置间隔。
  3. 在清单中声明BroadcastReceiver以捕获提供给号码为Intent的操作字符串。 1.
  4. 在您的BroadcastReceiveronReceive()方法中,触发AsyncTask