似乎对于21之前的Android版本,WorkManager在后台使用AlarmManager,因为JobScheduler不可用。参见例如here。
但是当使用WorkManager沿以下几行设置网络约束时:
Constraints.Builder constraintsBuilder = new Constraints.Builder();
constraintsBuilder.setRequiredNetworkType(NetworkType.CONNECTED);
Constraints constraints = constraintsBuilder.build();
OneTimeWorkRequest.Builder workRequestBuilder = new OneTimeWorkRequest.Builder(MyWorker.class);
workRequestBuilder.setInitialDelay(5000, TimeUnit.MILLISECONDS);
workRequestBuilder.setConstraints(constraints);
使用JobScheduler的行为似乎是计划的作业将一直坐在那里直到网络恢复,然后由于现在已满足约束而将立即启动。
但是警报有些不同,并且自然没有相关的约束。那么当Android <21依赖于AlarmManager时,如何实际处理网络约束呢?如果在没有网络的情况下发出警报,那该怎么办?到目前为止,我的经验有限,是(或根本)处理不好,我想知道是否需要通过听CONNECTIVITY_CHANGE
来手动处理网络约束?
答案 0 :(得分:2)
WorkManager已经在监听CONNECTIVITY_CHANGE
-仅仅因为它使用了警报并不意味着这是它使用的唯一信号。您无需手动进行任何操作。 WorkManager会为您完成所有约束跟踪。