当应用程序处于 Killed/In 背景时检测连接变化

Detect Connectivity Change When App is Killed/In Background

当我的应用不在前台时,我想检测网络变化 (connection\disconnection),这样我就可以同步用户的数据.

我曾尝试使用 broadcast receiver(如 this 中的回答),但当应用程序关闭时(Android N 之后)不再接收广播。它仅在应用程序位于前台时有效。

为了检测后台的连接变化,我尝试将 Job Scheduler(如 答案)与 .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 参数一起使用,但我的问题是该工作重复完成(每 15 分钟一次),即使用户仍然连接 到互联网。

我的目标是在互联网连接恢复后 执行一次 作业,然后停止作业,直到用户断开连接并再次连接。每次连接到 Internet 时,该工作都应该完成 一次,然后等到重新连接(不要重复)。

是否可以使用 Job Scheduler(或任何其他方式)实现此目的?

是否可以使用 Job Scheduler 实现此目的?
回答 - 我不知道但是
您可以使用 WorkManager。这是 Android Jetpack 的一部分。

有2个选项。

1) OneTimeWorkRequest(即您所需要的)。
2)PeriodicWorkRequest(周期性执行,最短15分钟,同jobScheduler)。

WorkManager 作为作业调度程序仅执行 10 秒。

为什么 WorkManager 好。下面的图片会给出答案。

文档 - https://developer.android.com/topic/libraries/architecture/workmanager