【发布时间】:2020-06-16 09:58:19
【问题描述】:
我在Kotlin android 项目中执行了这段代码,它会记录这两条消息。如果我将token 更改为Char 或String,它将只打印一条消息,这是想要的行为。 android 中的 java 项目中的相同用例可以正常工作。
val handler = Handler()
//val token1: Long = 1001L
//val token2: Int = 121
val token1: Long = 1001L
val token2: Int = 1002
handler.postAtTime(
{
Log.e("postAtTime 1", " printed 1 ")
handler.removeCallbacksAndMessages(token2)
},
token1,
SystemClock.uptimeMillis() + 2000
)
handler.postAtTime(
{
Log.e("postAtTime 2", " printed 2 ")
},
token2,
SystemClock.uptimeMillis() + 4000
)
我的问题是为什么在 Kotlin 中对于 Int、Long 类型的令牌,处理程序不删除回调?
编辑 如果我尝试使用注释值,它会起作用
【问题讨论】:
-
我试试这段代码,它只打印一个
-
可能与我的机器有关,但我与其他同事尝试过,他们也遇到了同样的问题
-
作为我的客人,Long 和 Int 在 Kotlin 中是 JVM 代码的原始类型,这意味着当您使用 Object 调用 removeCallbacksAndMessages 时,它将自动装箱并在 Int 和 Long 的情况下创建新对象。在 Kotlin 中,我建议您使用 String 或 Long?诠释?它是对象类型。
-
char怎么样,在 java 中它的原始权利,但这里的行为与int不同? -
它也为我打印一次。
标签: android kotlin android-handler