Ser*_*rov 8 android android-notifications android-workmanager
我正在使用 ListenableWorker 来执行后台任务。我也希望操作系统意识到我的服务重要性,所以我打电话
setForegroundAsync(new ForegroundInfo(WorkerConstants.NOTIFICATION_FOREGROUND_ID,
builder.build()));
Run Code Online (Sandbox Code Playgroud)
正如谷歌文档中所建议的那样。
但是当我的服务停止或取消时,我仍然可以看到前台服务通知并且我无法删除它。
此外,我在此通知中添加了取消按钮,但它什么也没做,我无法关闭它:
PendingIntent intent = WorkManager.getInstance(getApplicationContext())
.createCancelPendingIntent(getId());
builder.addAction(R.drawable.ic_redesign_exit,"Stop",intent);
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我向谷歌跟踪器提交了一个问题。并发现那完全是破旧的。
官方回应如下:
查看您的示例应用程序,您正在引入 CallbackToFutureAdaptor 返回的 ListenableFuture 完成与主循环程序之间的竞争。
即使不使用 REPLACE,在您的 Worker 标记为成功后,也会发布您的通知更新之一。
但是,您实际上可以通过等待对 setForegroundAsync() 的调用完成来避免竞争条件(因为它也返回一个 ListenableFuture)。一旦你这样做了 - 在你的 Worker 完成后,你永远不会收到通知。
我还将继续改进我们如何自动执行此操作,即使开发人员弄错了。
try {
// This ensures that you waiting for the Notification update to be done.
setForegroundAsync(createForegroundInfo(0)).get();
} catch (Throwable throwable) {
// Handle this exception gracefully
Log.e("FgLW", "Something bad happened", throwable);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |