onMeasure调用次数问题探究

本文探讨了在不同布局管理器下(RelativeLayout、FrameLayout、LinearLayout)自定义控件(扩展自TextView)的onMeasure方法的执行次数。这对于理解UI绘制流程及优化应用性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RelativeLayout下面只有一个自定义控件 该自定义控件扩展自TextView 假如重写这个自定义控件的onMeasure方法 他会执行几次?

FrameLayout、LinearLayout呢?

### Android 视图生命周期方法调用顺序 在 Android 开发中,理解视图(View)的生命周期对于优化应用性能和调试非常重要。以下是 `onAttachedToWindow`、`onMeasure` 和 `onDetachedFromWindow` 方法的具体调用顺序。 #### 1. `onAttachedToWindow` 当一个 View 或者其父容器被附加到窗口时会触发此方法。通常情况下,在 Activity 的 `onResume()` 后发生[^2]。这意味着此时 Window 已经准备好并准备绘制内容: ```java @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); Log.d("Lifecycle", "View attached to window"); } ``` #### 2. `onMeasure` 一旦 View 成功附着到了窗口上,并且布局参数已经设置完毕,则系统会对该组件及其子项进行测量操作来确定它们各自的尺寸大小。这一步骤紧接在 `onAttachedToWindow` 之后完成,但在实际显示之前还需要经过其他几个阶段如 `onLayout` 和 `onDraw` 等[^3]。 ```java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 自定义测量逻辑... setMeasuredDimension(width, height); } ``` #### 3. `onDetachedFromWindow` 当某个特定的 View 不再属于任何窗口的一部分时就会调用这个函数;它一般会在整个 Activity 销毁(`onDestroy`)过程结束以后被执行。需要注意的是,如果只是隐藏了一个界面而不是完全关闭的话,那么这里可能不会立即执行。 ```java @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); Log.d("Lifecycle", "View detached from window"); } ``` 综上所述,这三个方法按照如下顺序被调用:先是在 `onResume()` 完成后不久调用了 `onAttachedToWindow`,接着是 `onMeasure` 参与计算各部件所需空间,最后则是应用程序退出前一刻才会有机会遇到 `onDetachedFromWindow` 出现的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值