如何解决从另一个工人调度另一个工人
我已阅读关于 WorkManager about scheduling worker from another worker 的以下帖子。我正在尝试将我们用 Java 编写的工作服务转换为 Kotlin 中的 WorkManager。
在我们当前的代码库中,当一个作业服务被调用时,它可以有条件地调用另一个作业服务。
我有一个自定义作业服务,它在后台获取 Firebase 令牌,如下所示:
public class FirebaseJobService extends JobService {
@Override
public boolean onStartJob(@NonNull final JobParameters jobParameters) {
// Fetch Firebase token
String firebaseToken = FirebaseInstanceId.getInstance().getToken(
"12345" // Unique sender Id
"FCM"
);
// Persist fcm token to local sqlite db.
// Make another request to activate token on our backend. This is handled by another job service.
}
}
此服务当前被下面给出的另一个服务调用
public class MyCustomJobService extends JobService {
@Override
public void onStartJob(@NonNull final JobParameters jobParameters) {
. . . . .
boolean isForceActivationRequired = checkIfForceActivationRequired();
String userId = getUserId(); // Helper function to get the user ID.
// How can I call this service
if (isForceActivationRequired) {
PersistableBundle bundle = PersistableBundle();
bundle.putString("userId",userId);
bundle.putBoolean("forceActivation",isForceActivationRequired);
JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(1500,new ComponentName(context,FirebaseJobService.class));
jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
jobInfoBuilder.setExtras(persistableBundle);
// Schedule the job
final JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfoBuilder.build());
}
}
}
我正在尝试将 MyCustomJobService
转换为使用 WorkManager 库以及随后的所有其他作业服务。我的问题如下:
- 如何安排工作服务的工作请求?我计划将底部的作业服务转换为工作器实现。
- 一旦我迁移了多个工人,那么我如何从另一个工人安排一名工人?他们的结果是相互独立的,因此他们会有不同的工作 IDS。
解决方法
这可能是您的解决方案。
- 您可以为新创建的工作人员创建一个 WorkRequest。
val workRequest: WorkRequest = OneTimeWorkRequestBuilder<YourNewWorker>().build()
- 将您的工作请求提交给要运行的系统。
WorkManager.getInstance(context).enqueue(workRequest)
这可用于您的 JobService
或您拥有的其他工作人员。我不建议在没有彻底测试代码并验证您的重试策略以及您为工作请求设置的任何其他选项的情况下从另一个工作人员运行工作人员。可能会发生不良副作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。