Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 工作经理。如何取消附加的工作?_Android_Android Workmanager - Fatal编程技术网

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,我已经尝试取消带有标记的工作,它可以正常工作