如何解决Android JobScheduler超时?

时间:2017-09-15 05:41:45

标签: android android-jobscheduler

我有一个连接到Bitmessage网络的应用程序,即一直在下载和处理来自P2P网络的数据。此外,它应该(可选)仅使用WiFi /未计量网络。

我已经通过使用JobScheduler实现了这一点,但不幸的是它超时了10分钟(在Lollipop上显然甚至是1分钟)。

简而言之,我如何实现

服务
  • 在WiFi可用时自动启动
  • 在使用计量网络时自动断开连接
  • 没有超时
  • 适用于自Lollipop以来的所有Android版本

2 个答案:

答案 0 :(得分:6)

正如您所发现的,JobScheduler不是在后台持续运行的正确组件。正确的组件是foreground service

根据您的要求:

  
      
  • 在WiFi可用时自动启动
  •   

您仍应使用JobScheduler。您的JobScheduler本身不做任何工作:它只是启动您的前台服务。如果您希望使用Firebase JobDispatcher来恢复API 14,并且只需要在使用Google Play服务的设备上运行,则可以使用CONNECTIVITY_ACTION

  
      
  • 在使用计量网络时自动断开连接
  •   

在前台服务中,您应该以编程方式为isActiveNetworkMetered()广播注册一个监听器。在回调中,您应该检查action的结果(在API 16上可用),如果为真,则停止前台服务。

  
      
  • 没有超时
  •   

前台服务没有超时:它将继续运行,直到您停止服务。强烈建议将服务作为前台服务所需的通知具有{{3}},以允许用户手动停止服务。

答案 1 :(得分:1)

如上所述,作业调度程序不适用于永久运行的任务。这就是前台服务的用途。

在您的情况下,我建议使用作业来监控您想要的启动约束(计量网络等)。当该作业运行时,您启动前台服务以执行实际工作,并从onStartJob()返回false。

然后,当您的前台服务正在运行时,只需使用连接和安全功能直接观察计量网络的丢失。网络API,并在适当时关闭前台服务。