我有一个连接到Bitmessage网络的应用程序,即一直在下载和处理来自P2P网络的数据。此外,它应该(可选)只使用WiFi /未定义的网络。如何解决Android JobScheduler超时问题?
我已经通过使用JobScheduler实现了这一点,但不幸的是它有10分钟的超时时间(显然甚至在棒棒糖上1分钟)。
因此,在短期,我该如何实现一个
- 自动启动的服务时,提供无线网络连接
- 当计量网络用于
- 没有超时
- 作品会自动断开连接在所有Android版本上自Lollipop
我有一个连接到Bitmessage网络的应用程序,即一直在下载和处理来自P2P网络的数据。此外,它应该(可选)只使用WiFi /未定义的网络。如何解决Android JobScheduler超时问题?
我已经通过使用JobScheduler实现了这一点,但不幸的是它有10分钟的超时时间(显然甚至在棒棒糖上1分钟)。
因此,在短期,我该如何实现一个
正如您发现的,JobScheduler
不是t他正确的组件在后台连续运行。正确的组件是foreground service。
从您的要求:
- Wi-Fi时可用
还是应该JobScheduler
这个自动启动。你的JobScheduler
本身并没有做任何工作:它只是开始你的前台服务。如果您希望回到API 14,并且只需要在具有Google Play服务的设备上运行,就可以使用Firebase JobDispatcher。当计量网络用于
在您的前台服务
- 自动断开,你应该编程方式注册为
CONNECTIVITY_ACTION
广播的监听器。在回调中,您应该检查isActiveNetworkMetered()
(在API 16上提供)的结果,如果为true,则停止前台服务。
- 没有超时
前台服务有没有时间出来:它会继续运行,直到你停止服务。强烈建议使服务成为前台服务所需的通知有一个action以允许用户手动停止服务。
如前所述,作业调度程序不适用于永久运行的任务。这是前台服务的目的。
就你而言,我建议使用一个作业来监视你想要的启动约束(测量网络等)。当该作业运行时,将启动前台服务来执行实际工作,并从onStartJob()返回false。
然后,当您的前台服务正在运行时,只需使用连接&网络API直接观察丢失的计量网络,并在适当时关闭前台服务。
非常感谢,我会尽力的!这几乎就是我所做的,除了我实现onStopJob()而不是解决方案。 很遗憾,JobScheduler不允许关闭超时,这对我的需求来说非常完美,而且非常易于使用。 – Chris