我使用AlarmManager
来运行尝试从网上下载文件的服务。如果失败了,我想在5分钟内重试该服务。
在服务中我运行AsyncTask
来运行我的代码。据我所知,我可以判断它是否失败的唯一方法来自onPostExecute()
。
再次实施该服务重试的最佳方法是什么?
答案 0 :(得分:3)
Falmarri的回答是正确的,我不明白你的担忧。
在onPostExecute()
中,当您确定事情出错时:
getSystemService(ALARM_SERVICE)
以获取AlarmManager
set()
上致电AlarmManager
,在5分钟内触发您如果需要,请在Intent
的{{1}}上使用附加内容,以便为您提供有关重试内容的信息,或使用自定义操作字符串来区分重试与预定警报或其他内容。请注意,如果您使用PendingIntent
个额外内容,则需要选择包含Intent
的相应标记(例如PendingIntent
)。
问题是AlarmManager是从一个类启动的,但AsyncTask是在另一个类中 启动AlarmManager的类不知道它是否失败。
所以?多个班级可以与FLAG_UPDATE_CURRENT
交谈。此外,您可以通过其构造函数将数据传递到AlarmManager
子类。
此外,您可能需要考虑使用AsyncTask
而不是IntentService
和Service
。 AsyncTask
会自动为您提供后台线程。此外,当没有更多的工作要做时,它会关闭,这也很重要,所以你不会在市场上获得一堆一星评级,抱怨你一直在运行的服务。
我不想从我的Service类的onPostExecute()启动一个AlarmManager。
为什么不呢?
如果我从服务中启动一个AlarmManager,那么我就是在创建一个循环函数 我自己打电话给服务。
当然。那正是你想要的。问题不在于IntentService
或Service
或AsyncTask
是否与MyOtherReallyCoolClass
实际交谈的人 - 重新安排AlarmManager
的组件是Service
本身。