我正在使用 ListenableWorker 执行后台任务。
另外我希望操作系统了解我的服务重要性,所以我打电话
setForegroundAsync(new ForegroundInfo(WorkerConstants.NOTIFICATION_FOREGROUND_ID,
builder.build()));
正如谷歌文档中所建议的。
但是当我的服务停止或取消时,我仍然可以看到前台服务通知,但无法将其删除。
此外,我向此通知添加了取消按钮,但它什么也没做,我无法关闭它:
PendingIntent intent = WorkManager.getInstance(getApplicationContext())
.createCancelPendingIntent(getId());
builder.addAction(R.drawable.ic_redesign_exit,"Stop",intent);
有什么建议么?
我就此向 google tracker 提交了一个问题。并发现那完全是破旧的。
官方回应如下:
查看您的示例应用程序,您正在引入一场竞赛
返回的 ListenableFuture 完成
CallbackToFutureAdaptor 和主循环器。
即使不使用 REPLACE,您的通知更新之一也是
在您的 Worker 被标记为成功后发布。
但是,您实际上可以通过等待来避免竞争条件
调用 setForegroundAsync() 即可完成(因为这也
返回一个 ListenableFuture)。一旦你这样做了——你就永远不会拥有
您的工作人员完成后显示的通知。
我还将继续提出改进建议
即使开发人员犯了错误,也会自动执行此操作。
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)