如何解决Android JobScheduler超时问题?

android android-jobscheduler

1304 观看

2回复

42 作者的声誉

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

我已经使用JobScheduler实现了此功能,但不幸的是,它有10分钟的超时时间(在Lollipop上甚至是1分钟)。

简而言之,我该如何实施一项服务

  • WiFi可用时自动启动
  • 使用计量网络时自动断开连接
  • 不会超时
  • 自Lollipop以来可在所有Android版本上使用
作者: Chris 的来源 发布者: 2017 年 9 月 15 日

回应 2


6

115483 作者的声誉

决定

如您所见,a JobScheduler不是在后台连续运行的正确组件。正确的组件是前台服务

根据您的要求:

  • WiFi可用时自动启动

您仍然应该JobScheduler为此使用。您JobScheduler自己不做任何工作:它只是启动前台服务。如果您希望Firebase可以恢复到API 14,并且只需要在具有Google Play服务的设备上运行,则可以使用Firebase JobDispatcher

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

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

  • 不会超时

前台服务没有超时:它将继续运行,直到您停止该服务为止。强烈建议使服务成为前台服务所需的通知应采取措施允许用户手动停止您的服务。

作者: ianhanniballake 发布者: 2017 年 9 月 15 日

1

968 作者的声誉

如前所述,作业计划程序不适用于永远运行的任务。那就是前台服务的目的。

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

然后,在前台服务运行时,只需直接使用连接性和网络API来监视计量网络的丢失,并在适当时关闭前台服务。

作者: ctate 发布者: 2017 年 9 月 28 日
32x32