Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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 如果使用View.postDelayed()会自动删除可运行项吗_Android - Fatal编程技术网

Android 如果使用View.postDelayed()会自动删除可运行项吗

Android 如果使用View.postDelayed()会自动删除可运行项吗,android,Android,正如我所知,反复调用Handler.postDelayed()(再次在同一个runnable中调用postDelayed())可能会导致线程持有的某些实例永远无法释放 如果我使用View.postDelayed()添加一个runnable,我是否有责任调用View.removeCallbacks()以避免内存泄漏?或者,当视图被“销毁”时,runnable是否会从队列中删除 或者,当视图打开时,是否会从队列中删除可运行的 “毁灭” 这是你的责任。runnable将挂起在队列中,直到您显式删除它或

正如我所知,反复调用
Handler.postDelayed()
(再次在同一个runnable中调用
postDelayed()
)可能会导致线程持有的某些实例永远无法释放

如果我使用
View.postDelayed()
添加一个runnable,我是否有责任调用
View.removeCallbacks()
以避免内存泄漏?或者,当视图被“销毁”时,runnable是否会从队列中删除

或者,当视图打开时,是否会从队列中删除可运行的 “毁灭”


这是你的责任。runnable将挂起在队列中,直到您显式删除它或执行它(如果runnable没有在队列中发布自己)。我强烈建议您致电
removeCallbacks
。如果您正在对视图进行子类化,则可以使用
onDetachedFromWindow()

谢谢您的回答,onDetachedFromWindow()非常棒。现在,我可以使我的一些代码更加优雅。我还有另一个问题:我编写了一个util类来对任意视图执行一些动画,并在Activity.onDestroy()中调用类似stopAnim()的函数来删除可运行项(“显式删除它”)。但是我认为让util类的用户显式地完成发布工作有点难看。有没有办法知道视图何时不再使用?我找到了一种方法,但不知道它是否合适。在Runnable.run()的开头,尝试使用View.getWindowToken()获取窗口标记。如果为null,则退出循环。到目前为止对我有效。有没有办法知道视图何时不再使用?如果要对视图进行子类化,则应使用
ondAttachedFromWindow()
删除/取消注册