use*_*322 7 android android-workmanager
我有一个服务侦听传入的FCM通知.收到此类通知后,我使用WorkManager运行作业.
当同时收到多个通知时,如何确保当时只执行一个作业?作业应按顺序执行.在这种情况下,我想发送短信,这些不能同时发送.(请注意,在发送短信之前和之后,我会在此作业中执行其他类似的http请求,这就是为什么我决定为它创建一个作业,而不是直接从服务发送短信.)
public class MyFirebaseMessagingService extends FirebaseMessagingService {
public void onMessageReceived(RemoteMessage remoteMessage) {
//...
OneTimeWorkRequest sendSmsWorker = new OneTimeWorkRequest.Builder(SendSmsWorker.class).build();
WorkManager.getInstance().enqueue(sendSmsWorker);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了WorkManager文档中的高级部分; 它提到了链式序列,但是这些必须明确地链接到彼此(beginWith/then/then/...).
Per*_*abs 15
您需要将作业创建为具有相同组名的OneTimeWorkRequest,并将它们作为APPEND的唯一作品排入队列.这将使所有作业附加到同一个链并按顺序执行.
请注意,您应该始终返回Result.SUCCESS或Result.RETRY.返回Result.FAILURE将取消所有已排队的作业.如果您需要知道某个作业是否失败,那么您可以在worker setOutputData中设置一个自定义标志来处理您可能需要的这种情况.
final String JOB_GROUP_NAME = "your_jobs_group_name";
......
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(YOUR_WORK.class)
.setInputData(YOUR_WORK_DATA_BUILDER.build())
.build();
final WorkManager workManager = WorkManager.getInstance();
WorkContinuation work = workManager.beginUniqueWork(JOB_GROUP_NAME, ExistingWorkPolicy.APPEND, request);
work.enqueue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |