Android 工作经理。如何取消附加的工作?
我正在尝试取消尚未开始的任务 我的Android 工作经理。如何取消附加的工作?,android,android-workmanager,Android,Android Workmanager,我正在尝试取消尚未开始的任务 我的工人班级代码: class TestWork(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { override fun doWork(): Result { val data = inputData.getInt(KEY_OBJ, -1) runBlocking { for (i in 1..3){
工人
班级代码:
class TestWork(context: Context, workerParams: WorkerParameters) :
Worker(context, workerParams) {
override fun doWork(): Result {
val data = inputData.getInt(KEY_OBJ, -1)
runBlocking {
for (i in 1..3){
Log.d("MyTag", "testWork: $data")
delay(1000)
}
}
return Result.SUCCESS
}
override fun onStopped() {
super.onStopped()
Log.d("MyTag", "stopped")
}
companion object {
const val KEY_OBJ = "key"
val WORK_NAME = "name"
}
}
运行3起作用并第二次取消的代码示例。
但第二项工作仍在继续
val data1 = Data.Builder()
.putInt(TestWork.KEY_OBJ, 1)
.build()
val workRequest1 = OneTimeWorkRequest.Builder(TestWork::class.java)
.setInputData(data1)
.addTag("1")
.build()
val data2 = Data.Builder()
.putInt(TestWork.KEY_OBJ, 2)
.build()
val workRequest2 = OneTimeWorkRequest.Builder(TestWork::class.java)
.setInputData(data2)
.addTag("2")
.build()
val data3 = Data.Builder()
.putInt(TestWork.KEY_OBJ, 3)
.build()
val workRequest3 = OneTimeWorkRequest.Builder(TestWork::class.java)
.setInputData(data3)
.addTag("3")
.build()
WorkManager.getInstance().enqueueUniqueWork(
TestWork.WORK_NAME,
ExistingWorkPolicy.APPEND,
workRequest1
)
WorkManager.getInstance().enqueueUniqueWork(
TestWork.WORK_NAME,
ExistingWorkPolicy.APPEND,
workRequest2
)
WorkManager.getInstance().enqueueUniqueWork(
TestWork.WORK_NAME,
ExistingWorkPolicy.APPEND,
workRequest3
)
WorkManager.getInstance().cancelWorkById(workRequest2.id)
如何取消第二份工作?当第一个被执行时您应该在您的onWork
方法中使用方法调用
Android开发者峰会上的视频对此进行了解释 如我所见,您的取消行有一个错误,您必须将
cancelWorkById(“2”)
替换为cancelAllWorkByTag(“2”)
,因为您正在向工作添加标记。addTag(“2”)
我目前正在使用WorkManager,我已经尝试取消带有标记的工作,它可以正常工作