概述文章目录一、相关知识科普:二、流程:一、相关知识科普:显示系统中一般包括CPU、GPU、display三个部分,CPU一般负责计算数据,然后把计算好的数据交给GPU,GPU会对这些图形数据进行渲染,渲染后放在buffer里面存起来,最后display负责将buffer里的数据呈现到显示器中Android的
刷新 @H_403_0@
文章目录一、相关知识科普:二、流程:
一、相关知识科普:显示系统中一般包括cpu、GPU、display三个部分,cpu一般负责计算数据,然后把计算好的数据交给GPU,GPU会对这些图形数据进行渲染,渲染后放在buffer里面存起来,最后display负责将buffer里的数据呈现到显示器中AndroID的刷新频率是60帧/秒,AndroID系统中每隔16.6ms会发送一次VSYNC(同步)信号,有可能会触发UI的渲染二、流程:(1)界面上任何一个VIEw的刷新请求最终都会走到VIEwRootImpl#scheduleTraversals()里来安排一次遍历绘制VIEw树的任务(2)首先,scheduleTraversals()会先过滤掉同一帧内的重复调用,确保同一帧内只需要安排一次遍历绘制VIEw树的任务,遍历过程中会将所有需要刷新的VIEw进行重绘(3)然后,scheduleTraversals()会往主线程的消息队列中发送一个同步屏障,拦截这个时刻之后所有的同步消息的执行,但不会拦截异步消息,以此来尽可能的保证当接收到
屏幕刷新信号时可以第一时间处理遍历绘制VIEw树的工作(4)发完同步屏障后,scheduleTraversals()将performTraversals()封装到Runnable里面,然后调用Choreographer#postCallback()方法(5)postCallback()方法会先将这个Runnable任务以当前时间戳放进一个待执行的队列里,然后如果当前是在主线程就会直接调用一个native层方法,如果不是在主线程,会发一个最高优先级的message到主线程,让主线程第一时间调用这个native层的方法(6)native层的这个方法是用来向底层订阅下一个屏幕刷新信号Vsync,当下一个屏幕刷新信号发出时,底层就会回调Choreographer#onVsync()方法来通知上层app(7)onVsync()方法被回调时,会往主线程的消息队列中发送一个执行doFrame()方法的异步消息(8)doFrame()方法会去取出之前放进待执行队列里的任务来执行,取出来的这个任务实际上是VIEwRootImpl#doTraversal()在 *** 作(9)doTraversal()中首先会移除同步屏障,再调用performTraversals()方法,根据当前状态判断是否需要执行performMeasure()测量、perfromLayout()布局、performDraw()绘制流程,在这几个流程中都会去遍历VIEw树来刷新需要更新的VIEw(10)等到下一个Vsync信号到达,将上面计算好的数据渲染到屏幕上,同时如果有必要开始下一帧的数据处理 总结
以上是内存溢出为你收集整理的Android的UI刷新机制(Android屏幕刷新机制)全部内容,希望文章能够帮你解决Android的UI刷新机制(Android屏幕刷新机制)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)