1

我使用 anAlarmManager来运行一个尝试从网络下载文件的服务。如果失败,我想在 5 分钟内重试该服务。

在服务内部,我运行一个AsyncTask来运行我的代码。据我所知,我可以判断它是否失败的唯一方法是从onPostExecute().

再次实施该服务重试的最佳方法是什么?

4

1 回答 1

3

Falmarri 的回答是正确的,我不明白你的担忧。

onPostExecute()中,当您确定事情出错时:

  1. 打电话getSystemService(ALARM_SERVICE)获取AlarmManager
  2. 来电set()5AlarmManager分钟触发你

Intent如果需要,请在 中使用附加功能PendingIntent为您提供有关重试内容的信息,或使用自定义操作字符串将重试与计划的警报区分开来,或其他内容。请注意,如果您使用附加功能,则需要使用(例如, )Intent选择适当的标志。PendingIntentFLAG_UPDATE_CURRENT

问题是 AlarmManager 是从一个类启动的,但 AsyncTask 在另一个类中,因此启动 AlarmManager 的类不知道它是否失败。

所以?多个类可以与AlarmManager. 此外,您可以随意AsyncTask通过其构造函数将数据传递给您的子类。

此外,您可能需要考虑使用 anIntentService而不是Serviceand AsyncTaskIntentService自动给你一个后台线程。另外,当没有更多工作要做时它会关闭,这也很重要,因此您不会在市场上获得一堆一星评级来抱怨您一直在运行的服务。

我不想从我的 Service 类的 onPostExecute() 启动一个 AlarmManager。

为什么不?

如果我从服务中启动一个 AlarmManager,那么我就在创建一个循环函数,我在其中从自身调用服务。

当然。那就是你想要的。与实际交谈的那个Service或 theAsyncTask或 the无关紧要- 重新安排 the 的组件是它本身。MyOtherReallyCoolClassAlarmManagerServiceService

于 2010-09-12T11:33:17.017 回答