Android Kotlin中如何在Runnable内部重复提交自身?
解决Runnable内部重复提交自身的问题
嘿,我来帮你搞定这个问题!你现在想在Runnable内部重复提交它自己对吧?其实很简单,直接把定义好的runnable对象传进去就行,但这里还有几个小细节得注意,不然可能达不到预期效果。
首先先纠正你代码里的一个小错误:numLinesToDraw = numLinesToDraw ++ 这行是无效的。因为后置自增运算符++会先返回变量的原始值,再完成自增操作,所以这行代码相当于把numLinesToDraw原来的值又赋值回去,等于没做自增。你应该改成numLinesToDraw++或者numLinesToDraw += 1。
修正后的完整代码如下:
var runnable = Runnable { if (numLinesToDraw >= amplititudes.size) { // 这里可以添加终止逻辑,比如不再继续重复提交任务 return@Runnable } else { numLinesToDraw++ // 修正自增写法 invalidate() // 直接传入已定义的runnable对象,实现重复提交自身 postDelayed(runnable, 2000) } } postDelayed(runnable, 2000)
逻辑说明
- 每次Runnable执行时,先判断是否已经达到绘制的上限(
numLinesToDraw >= amplititudes.size),如果达到就直接返回,停止后续的重复提交; - 如果没达到上限,就自增计数、调用
invalidate()触发View重绘,然后通过postDelayed(runnable, 2000)把自身再次提交到View的消息队列,实现每2秒重复执行一次的效果。
额外提醒
如果你的View后续可能被销毁(比如Activity退出),记得要调用removeCallbacks(runnable)来取消这个重复任务,避免内存泄漏问题。
内容的提问来源于stack exchange,提问作者Dishonered
相关产品推荐
相关产品推荐

