Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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
Android 异步重复计划任务_Android_Android Asynctask - Fatal编程技术网

Android 异步重复计划任务

Android 异步重复计划任务,android,android-asynctask,Android,Android Asynctask,如何创建一个AsyncTask,它在固定的时间间隔后继续运行 例如,每5分钟从服务器获取一次数据,并通知调用线程它已经收到数据。我在论坛上搜索了一下,但没找到多少。到目前为止,我收集到的是 1) UI线程将调用AsyncTask 2) onPrExecute用于执行前的UI线程访问 3) OnPostExecute用于执行后的UI线程访问 我不需要向用户显示任何进度更新。此外,当应用程序关闭时,任务将被销毁。这方面的任何教程都会很有帮助,正如评论中的其他建议一样。因此,让我详细阐述一下 不要使用

如何创建一个
AsyncTask
,它在固定的时间间隔后继续运行

例如,每5分钟从服务器获取一次数据,并通知调用线程它已经收到数据。我在论坛上搜索了一下,但没找到多少。到目前为止,我收集到的是

1) UI线程将调用
AsyncTask

2)
onPrExecute
用于执行前的UI线程访问

3)
OnPostExecute
用于执行后的UI线程访问


我不需要向用户显示任何进度更新。此外,当应用程序关闭时,任务将被销毁。这方面的任何教程都会很有帮助

,正如评论中的其他建议一样。因此,让我详细阐述一下

不要使用异步任务。相反,只使用IntentService

  • 使类扩展IntentService
  • 使用Alarm Manager通过特定的操作项触发您自己的服务意图
  • 定义用于通知客户端此服务的接口
  • 维护客户机提供的这些接口实现对象的列表
  • 在onHandleIntent(意图)中,通过检查操作来识别调用
  • 直接在intentService上启动数据获取请求,作为使用工作线程,并在维护的接口对象列表的end call update委托中启动

  • 创建方法以允许活动注册和取消注册侦听这些更新

  • 这实际上是在您维护的列表中添加他们提供的接口实现,并在调用unregister时从列表中删除
  • 确保活动在onResume中注册自身,并在onPause中注销自身
  • 使用重复报警或在单次操作运行结束时再次启动报警。 我希望有帮助:)

  • 您可以使用计划以固定速率重复
    异步任务。

    尝试此操作

    -更好地使用
    服务
    使这项工作反复进行

    -现在您可以使用绑定或未绑定的
    服务
    。如果希望服务绑定到活动,则使用绑定服务,否则使用未绑定服务

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

    查看此链接:


    我编写了一个应用程序,它定期触发
    AsyncTask
    s,但即使在应用程序关闭时它们也会持续。不管怎样,我要做的是:

  • 创建一个
    pendingent
    (通过
    getBroadcast()
    )包含包含操作的
    Intent
  • pendingent
    提供给系统的
    AlarmManager
    ,并设置间隔
  • 在清单中声明一个
    BroadcastReceiver
    ,以捕获提供给1号中的
    Intent
    的操作字符串
  • BroadcastReceiver
    onReceive()
    方法中,启动
    AsyncTask

  • 我希望你使用服务。使用服务和报警服务manager@hotveryspicy:那样的话,我们的服务会更好吗?因为我不需要处理多个请求。另外,是否有任何教程取决于您,因为它是服务本身的子类,
    IntentService
    是最好的,因为它们在单独的线程中运行,并且一旦工作结束,也会被终止(隐式的),此外,它还通过创建一个请求队列来处理多个请求。@hotveryspicy:IntentService的任何教程在固定间隔后反复运行自己都无法单独完成这项工作。为什么我们需要异步任务呢。是的,我怎么能忘记呢。不要使用异步任务。IntentService能够做到异步任务需要将自身附加到上下文。通过遵循这一点,它将作为应用程序中的独立模块工作。它为注册到它的任何人提供更新。这将非常有效。相信我。
    AsyncTask需要为自己附加一个context
    perfectoo。但是不要像
    AsyncTask
    s?@hotveryspicy那样在主UI线程中运行
    IntentService
    s,这不是真的。您需要调用
    execute()
    方法使其在自己的线程中运行,但您只能从一个循环器线程(通常是主线程)调用它。这就是我在运行Asyntask时所说的,如果用户与UI进行任何交互,则用户会感觉到闪烁(这很糟糕)@Phil:所以我猜每次使用TimerTask时,asyncTask都会生成自己的线程,而不是在主或UI中运行thread@ankuj,这完全取决于如何实现itI。还应注意,如上所述,异步任务需要在循环器线程上启动。因此,您需要从主线程开始异步任务,时间间隔为一段时间,您可以使用
    Context.runOnUIThread
    instance方法来完成。