gpt4 book ai didi

android - WorkManager - 如何按顺序执行作业

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:29:50 27 4
gpt4 key购买 nike

我有一个服务监听传入的 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);
//...
}
}

我已经查看了 WorkManager 文档中的高级部分;它提到链式序列,但是这些序列必须明确地相互链接(beginWith/then/then/...)。

最佳答案

您需要将作业创建为具有相同组名的 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();

关于android - WorkManager - 如何按顺序执行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com