UI刷新机制 ---- 林冠宏
2017-02-17 20:07:06 0 举报
UI刷新机制是林冠宏提出的一种用于优化用户界面响应速度的技术。它通过在后台异步执行UI更新操作,避免了主线程阻塞,从而提高了应用程序的流畅性和用户体验。这种机制通常包括以下几个关键步骤:首先,将UI更新任务放入一个队列中;然后,在后台线程中逐个处理这些任务;最后,将处理结果应用到用户界面上。这种机制可以有效地解决UI更新导致的卡顿问题,使应用程序更加稳定和高效。总之,UI刷新机制是一种重要的技术手段,对于提高应用程序的性能和用户体验具有重要意义。
作者其他创作
大纲/内容
NativeWindow画布
eventReceiver(...)
Android gui系统(图形界面)
接口
waitMessage
Android HAL硬件层
图形底层函数库
mHandler.handleMessage(...)
FrameBuffer
作者:林冠宏
缓冲技术,双缓冲绘图
mReadyToRunBarriar.wait()等待右边线程完成启动
waitForEvent(...)等待事件到来
已启动情况
如果还没启动,那么SurfaceFliger启动
接收到
补充:对于网上的针对 loop() 函数里面的 next()阻塞问题,引申到 linux 的一种IO多路复用机制 epoll,并不能讲明这个问题,只能告诉我们,loop 里面的阻塞不会占用 CPU资源,属于主线程沉睡,当在pipe写端有输入进入的时候,那么主线程会被唤醒。
OpenGL
Composer
Layer,BufferQueue,IBinders(4.3是3个)
为什么Activity里主线程的Looper.loop()内的死循环不会造成主线程阻塞 ?
终端 Window
返回Flag
所描述皆是底层C++代码层次
EGL
MessageQueueinit Looperinit Handler启动服务于SurfaceFlinger 的业务线程,往后也是在它里面处理消息事件线程内进行threadLoop(),即是事件死循环
进入到 MessageQueue
mLooper.pollOnce(...)
Layer 层绘制
最终结论:View 的底层绘制都是基于Binder通讯触发,由底层 SurfaceFlinger 的工作线程中的事件机制,包含 handler ,looper,messageQueue 来进行接收、处理的。与 ActivityThread 中的无关,但是如果在ActivityThread 里面调用 View的相关函数,其原理也是最终被通知到此处处理掉了,并显示到界面。
回调SurfaceFlinger的onMessageReceiver
直接使用者
注:虚线为依赖,实线为导出
由其他进程触发,Binder 跨进程通讯,基于 VSync信息。例如某个点击事件
SurfaceFlinger extends BindService
0 条评论
回复 删除
下一页