- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于某些原因,我无法从 Android WorkManager 的PeriodicWorkRequest 获取输出数据。工作线程按预期定期运行,只是不返回任何数据。
我的主要 Activity :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
schedulePeriodicRequests();
}
public void schedulePeriodicRequests() {
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(ServerRequestsWorker.class, 15, TimeUnit.MINUTES)
.build();
WorkManager workManager = WorkManager.getInstance(MainActivity.this);
workManager.enqueue(workRequest);
workManager.getWorkInfoByIdLiveData(workRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(@Nullable WorkInfo workInfo) {
if (workInfo != null) {
Log.d(LOG_TAG, "WorkInfo received: state: " + workInfo.getState());
String message = workInfo.getOutputData().getString(ServerRequestsWorker.KEY_MESSAGE);
Log.d(LOG_TAG, "message: " + message);
}
}
});
}
我的ServerRequestsWorker:
public static final String KEY_MESSAGE = "message";
@NonNull
@Override
public Result doWork() {
Log.d(LOG_TAG, "Worker works");
Data outputData = new Data.Builder()
.putString(KEY_MESSAGE, "This is output message")
.build();
return Result.success(outputData);
}
workInfo.getOutputData().getString 的值始终为 null。这是我在日志中得到的内容:
MainActivity: WorkInfo received: state: ENQUEUED
MainActivity: message: null
ServerRequestsWorker: Worker works
WM-WorkerWrapper: Worker result SUCCESS for Work [ id=5f2beba8-c8bf-4f07-b4ee-e876e95d3cdb, tags={ com.anshmidt.pricemonitor.ServerRequestsWorker } ]
MainActivity: WorkInfo received: state: RUNNING
MainActivity: message: null
MainActivity: WorkInfo received: state: ENQUEUED
MainActivity: message: null
有趣的是,从 OneTimeWorkRequest 获取输出数据工作正常。如果我从PeriodicWorkRequest切换到OneTimeWorkRequest:
OneTimeWorkRequest serverScraperWorkRequest = new OneTimeWorkRequest.Builder(ServerRequestsWorker.class)
.build();
WorkManager workManager = WorkManager.getInstance(MainActivity.this);
workManager.enqueue(serverScraperWorkRequest);
workManager.getWorkInfoByIdLiveData(serverScraperWorkRequest.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(@Nullable WorkInfo workInfo) {
if (workInfo != null) {
Log.d(LOG_TAG, "WorkInfo received: state: " + workInfo.getState());
String message = workInfo.getOutputData().getString(ServerRequestsWorker.KEY_MESSAGE);
Log.d(LOG_TAG, "message: " + message);
}
}
});
,然后我成功接收到输出数据的值:
MainActivity: message: This is output message
我尝试过将独特的工作排队并按标签排队,但没有运气。尝试过WorkManager 2.2.0和1.x,结果是一样的。
我错过了什么吗?是否有可能从PeriodicWorkRequest 获取输出数据?我做错了什么?
最佳答案
Note that output is only available for the terminal states (WorkInfo.State.SUCCEEDED and WorkInfo.State.FAILED).
对于定期工作,每次运行都会重复使用相同的 ID,这意味着工作永远不会达到 SUCCEEDED
- 相反,工作会立即转换回 ENQUEUED
,等待用于下一次定期运行。因此,您所经历的似乎是预期的行为。
正如您所见,使用一次性工作不会出现这种行为,因为该工作实际上已成功SUCCEEDED
并且每次后续运行(如果您的一次性工作是重新安排相同类型的工作) ) 将有一个新的 ID。另一种选择是不使用输出数据,而是将定期工作的结果存储在您自己的数据库中。
关于java - Android 工作管理器 : Cannot get output data from PeriodicWorkRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57845459/
我将 PeriodicWorkRequest 设置为 15 分钟。但它有时重复 10 有时 17 分钟。如何设置最大几秒偏差。 val workRequest = PeriodicWorkReque
我对工作请求 (1.0.0-alpha10) 有疑问比方说,如果我想每 5 小时启动一项工作(在我的例子中是通知),我会执行以下操作 static void StartWorker(){ Period
我在研究 Android WorkManager,喜欢一个问题。 我有 2 个作品,第一个是从服务器获取一些数据,第二个是预加载资源(取决于第一个作品的结果)。我需要每小时执行一次此链。 我需要这样的
对于 OneTimeWorkRequest,我们可以使用 setInitialDelay 来指定初始延迟。 但是,PeriodicWorkRequest 没有这样的功能。 有什么可靠的方法可以实现吗?
有什么简单的方法可以改变 PeriodicWorkRequest 的重复间隔吗? 让我们有一个每 6 小时触发一次并且已经入队的 Worker,但我需要将其更改为 3 小时周期。 如果解决方案是取消请
我尝试过每 15 分钟重复一次任务,但 Worker#doWork 永远不会被调用,即使是第一次(在 Nexus 6P - Android 8 上)。但是,在 Android 8 模拟器上进行测试时,
我正在使用 androidx 工作管理器 API,在工作管理器中我使用 PeriodicWorkRequest 每 4 小时触发一次工作。但它只在运行应用程序后工作一次。 PeriodicWorkRe
由于 WorkManager 是 Google I/O 中新引入的,我正在尝试使用 workmanager 定期执行任务, 我正在做的是,使用 PeriodicWorkRequest 安排工作,如下所
在应用程序启动时,我想启动将永远有效的服务,但是当用户再次打开应用程序时,它会重复。 PeriodicWorkRequest.Builder sendDataBuilder = new Periodi
为了测试循环工作,我需要等待整整 15 分钟(reference)来测试循环,这确实效率不高。是否有更好更快的方法让开发人员更快地对此进行测试? 最佳答案 您可以在 MIN_PERIODIC_INTE
我最近尝试使用 WorkManager的PeriodicWorkRequest s 作为在后台定期获取用户位置更新的可靠方法。该库满足了我的要求,这个特殊的细节引起了我的注意: Guarantees
对于 OneTimeWorkRequest,我们可以使用 WorkContinuation 来确保如果作业已经安排好了,我们可以保留或替换它。PeriodicWorkRequest 没有这样的选项,因
我一直在尝试从 Firebase Job Dispatcher 迁移到 androidx Work Manager。我的应用程序与 Job Dispatcher 配合良好。 Work Manager
我正在尝试使用 WorkManager,但我似乎遇到了一个问题,即 PeriodicSync 仅在启动时重复一次,仅此而已。 我看过这篇文章 Is WorkManager's PeriodicWork
由于某些原因,我无法从 Android WorkManager 的PeriodicWorkRequest 获取输出数据。工作线程按预期定期运行,只是不返回任何数据。 我的主要 Activity : @
我正在尝试使用 PeriodicWorkRequest 安排定期检查。它适用于 android API 23 及更高版本,但不适用于 android API 21。在 API 21 上它只能运行一次。
我需要根据以下逻辑向用户推送应用通知。 A 类通知将每 24 小时显示一次。 B 类通知将每 7 天显示一次。 C 类通知将每 15 天显示一次。 我按如下方式使用了 PeriodicWorkRequ
我是一名优秀的程序员,十分优秀!