android基础知识java知识安卓分享

Android View与Activity生命周期的关系

2018-08-07  本文已影响8人  强大帅

简介

View依附于Activity,学习View与Activity生命周期之间的关系,可以更好的理解View的工作原理

写此文时看的文章

Android Activity详解
Android View生命周期
View的生命周期和Activity生命周期的执行顺序
View的生命周期方法和Activity生命周期方法关系

View官方给出的方法

View方法

1、Creation(创建)

2、Layout(布局)

3、Drawing(绘制)

4、Event processing(事件处理)

5、Focus(聚焦)

onFocusChanged(boolean, int, android.graphics.Rect):该方法在当前View获得或失去焦点时被调用。
onWindowFocusChanged(boolean):该方法在包含当前View的window获得或失去焦点时被调用。

6、Attaching(附上)

onAttachedToWindow():该方法在当前View被附到一个window上时被调用。
onDetachedFromWindow():该方法在当前View从一个window上分离时被调用。
onVisibilityChanged(View, int):该方法在当前View或其祖先的可见性改变时被调用。
onWindowVisibilityChanged(int):该方法在包含当前View的window可见性改变时被调用。

View的所有生命周期

onFinishInflate() 当View中所有的子控件均被映射成xml后触发

onMeasure(int, int) 确定所有子元素的大小

onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发

onSizeChanged(int, int, int, int) 当view的大小发生变化时触发

onDraw(Canvas) view渲染内容的细节

onKeyDown(int, KeyEvent) 有按键按下后触发

onKeyUp(int, KeyEvent) 有按键按下后弹起时触发

onTrackballEvent(MotionEvent) 轨迹球事件

onTouchEvent(MotionEvent) 触屏事件

onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发

onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发

onAttachedToWindow() 当view被附着到一个窗口时触发

onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和 onAttachedToWindow() 是相反的

onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发

View的关键生命周期

--> 构造View()
--> onFinishInflate()
--> onAttachedToWindow()
--> onMeasure()
--> onSizeChanged()
--> onLayout()
--> onDraw()
--> onWindowFocusChanged()
--> onDetackedFromWindow()

View与Activity生命周期

如图


View与Activity生命周期

(1) 在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了View的绘制工作: onAttachedToWindow –> onMeasure –> onSizeChanged –> onLayout –> onDraw

当按住锁屏键的时候,Activity和View生命周期发生变化:
按住锁屏键

Activity onPause之后 调用了 View的 onSaveInstanceState方法

当重新回到页面的时候,Activity和View的生命周变化:
重新回到页面

View的生命周期方法没有被调用

当点击回退的时候,Activity和View的生命周期发生变化:
点击回退

Activity onPause -> onStop -> onDestroy
onDestroy之后 调用了 View的onDetachedFromWindow方法

总结

(1) 在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure –>
onSizeChanged –> onLayout –> onDraw
(3) onMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onResume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次

上一篇 下一篇

猜你喜欢

热点阅读