Java 如何使用AlarmManager在AsyncTask中下载失败时运行重试
我使用一个Java 如何使用AlarmManager在AsyncTask中下载失败时运行重试,java,android,service,android-asynctask,alarmmanager,Java,Android,Service,Android Asynctask,Alarmmanager,我使用一个AlarmManager来运行一个试图从web下载文件的服务。如果失败,我想在5分钟内重试该服务 在服务内部,我运行一个AsyncTask来运行代码。据我所知,判断它是否失败的唯一方法是通过onPostExecute() 再次重试该服务的最佳方式是什么?Falmari的答案是正确的,我不理解您的担忧 在onPostExecute()中,当您确定出现问题时: 调用getSystemService(报警\u服务)获取AlarmManager 在AlarmManager上调用set(),在5
AlarmManager
来运行一个试图从web下载文件的服务。如果失败,我想在5分钟内重试该服务
在服务内部,我运行一个AsyncTask
来运行代码。据我所知,判断它是否失败的唯一方法是通过onPostExecute()
再次重试该服务的最佳方式是什么?Falmari的答案是正确的,我不理解您的担忧 在
onPostExecute()
中,当您确定出现问题时:
getSystemService(报警\u服务)
获取AlarmManager
AlarmManager
上调用set()
,在5分钟内触发pendingent
中的Intent
上使用附加功能,以提供有关重试内容的信息,或使用自定义操作字符串来区分重试与计划报警等。请注意,如果您使用Intent
extras,则需要使用pendingent
(例如,flag\u UPDATE\u CURRENT
)选择适当的标志
问题是AlarmManager是从一个类启动的,但AsyncTask在另一个类中,因此
启动AlarmManager的类不知道它是否失败
那么?多个类可以与AlarmManager
对话。另外,可以通过构造函数将数据传递给AsyncTask
子类
也可以考虑使用<代码> ItnService < /C> >而不是<代码>服务和<代码> AycCastase>。code>IntentService自动为您提供后台线程。此外,当没有更多的工作要做时,它会关闭,这一点也很重要,所以你不会在市场上得到一大堆一星级的评级,抱怨你一直在运行的服务
我不想从我的服务类的onPostExecute()启动AlarmManager 为什么不呢 如果我从服务中启动AlarmManager,那么我会创建一个循环函数,其中 我从服务本身打电话当然。这就是你想要的。无论是
服务
还是异步任务
还是MyOtherReallyCoolClass
是与AlarmManager
实际对话的组件,都无关紧要——重新安排服务
的组件就是服务本身。如果失败,添加一次性警报以重新启动服务。AlarmManager多久正常运行一次服务?@FalmariAlarmManager
按用户选择的设定间隔运行(例如30分钟、1小时、1天等)。问题是AlarmManager
是从一个类启动的,但AsyncTask在另一个类中,因此启动AlarmManager
的类不知道它是否失败。我不想从我的服务类的onPostExecute()
启动AlarmManager
。您不想从onPostExecute()启动AlarmManager有什么原因吗?如果不想使用计时器任务,可以使用计时器任务alarmmanager@Falmarri如果我从服务内部启动一个AlarmManager
,那么我就是在创建一个循环函数,在这个函数中,我从服务本身调用服务。有没有一种方法可以实现一个处理程序来发回并通过或失败?我的意思是,如果alarmmanager失败,您可以有条件地调用它。创建一个不重复出现的单独警报,以便在5分钟内重新安排服务。你的服务失败,我想你的意思是它下载文件失败,而不是像android那样失败,对吧?