0

如果用户没有漫游,我们的应用程序会使用 Job Service 进行后台工作。这是我们安排工作的方式:

JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(JobServicesIds.CONNECTIVITY.getValue(), new ComponentName(context.getPackageName(), ConnectivityJobService.class.getName()));
jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NOT_ROAMING);
jobInfoBuilder.setPersisted(false);
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
int result = jobScheduler.schedule(jobInfoBuilder.build());

为了测试这一点,我们使用模拟器,启用漫游,未连接 wifi,将数据状态设置为漫游并启动应用程序。为了触发工作,我们将数据状态更改为搜索然后漫游。在 Android Emulator API 24 中,作业将触发,一切都很好。在 Android Emulator API 26 中,作业不会触发 :(

有任何想法吗?:)

4

1 回答 1

1

调用setRequiredNetworkType将网络定义为您的工作的严格要求。如果请求的网络不可用,您的作业将永远不会运行。请参阅 setOverrideDeadline(long) 以更改此行为。调用此方法将覆盖之前由 setRequiredNetwork(NetworkRequest); 定义的任何要求;您通常只想调用其中一种方法。

当您的作业在 onStartJob(JobParameters) 中执行时,请务必使用 getNetwork() 返回的特定网络,否则您将使用可能不符合此约束的默认网络。

有关更多详细信息,请访问上述答案的来源https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiredNetwork(android.net.NetworkRequest)

于 2018-03-21T10:20:26.590 回答