登录

去注册

登录

注册

去登录

注册

每日一问 View的onAttachedToWindow ,onDetachedFromWindow 调用时机,使用场景是什么?

xiaoyang   2019-05-26   收藏

View的onAttachedToWindow ,onDetachedFromWindow 调用时机,使用场景是什么?


欢迎描述各种使用场景,坑等。

5

调用时机:

顾名思义,Attached就是附加的意思,Detached:分离。 onAttachedToWindow就是当这个View附加到Window(每个Activity里面都对应着一个Window)的时候,这个方法就会被回调。 onDetachedFromWindow刚好相反,它是当View与Window分离的时候回调。


使用场景:

自定义View的时候,某些比较重量级的资源,而且不能与其他View通用的时候,就可以重写这两个方法,并在onAttachedToWindow中进行初始化,onDetachedFromWindow方法里释放掉。


比如Bitmap,虽说现在不用主动调用recycle方法来回收,但在8.0及以上系统,手动调用是会立即释放所占用的内存的,所以个人认为还是有必要手动回收的,当然了,如果图片比较小,对内存没什么影响的就不用了。


一些用作计算的子线程,或其他 跟View显示有关的任务,在onDetachedFromWindow中也可以停掉了,因为大多数情况下,这些实时数据对于被分离后View已经没有意义了。

回复
1

我记得一个比较好用,就是计算view的宽高,以前都是view.postDelay()里面去计算,后面知道了在onAttachedToWindow 里面就可以拿到view的宽高了

回复
雨神 : @xiaoOo 

到底在onAttachedToWindow 能不能拿到宽高?

2019-08-21 回复
雨神 : @xiaoOo 

你们谁说的对?

2019-08-21 回复
sunchaoyang : @么么哒 

View.post方法里获取宽高就行

2019-06-19 回复
xiaoOo : @么么哒 

onAttachedToWindow 里并不能拿到View的宽高信息的,viewrootImpl 回调 window 的 onAttch 之后才调的 performMeasure 。都没 measur  ...查看更多

2019-05-31 回复

删除留言

确认删除留言,会导致相关评论丢失?

取消 确定