Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用AlarmManager在AsyncTask中下载失败时运行重试_Java_Android_Service_Android Asynctask_Alarmmanager - Fatal编程技术网

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多久正常运行一次服务?@Falmari
    AlarmManager
    按用户选择的设定间隔运行(例如30分钟、1小时、1天等)。问题是
    AlarmManager
    是从一个类启动的,但AsyncTask在另一个类中,因此启动
    AlarmManager
    的类不知道它是否失败。我不想从我的服务类的
    onPostExecute()
    启动
    AlarmManager
    。您不想从onPostExecute()启动AlarmManager有什么原因吗?如果不想使用计时器任务,可以使用计时器任务alarmmanager@Falmarri如果我从服务内部启动一个
    AlarmManager
    ,那么我就是在创建一个循环函数,在这个函数中,我从服务本身调用服务。有没有一种方法可以实现一个处理程序来发回并通过或失败?我的意思是,如果alarmmanager失败,您可以有条件地调用它。创建一个不重复出现的单独警报,以便在5分钟内重新安排服务。你的服务失败,我想你的意思是它下载文件失败,而不是像android那样失败,对吧?