你真正了解UI线程更新的几种方式吗—面试必备之深度揭秘

293 阅读2分钟

你真正了解UI线程更新的几种方式吗——面试必备之UI刷新大解密

我们都知道一般面试的时候都会问道Handler的运行机制。有些时候面试官不会直接问道。但是如果问道UI线程更新的方式有哪几种,你知道多少?

今天我们用demo来探讨一下主线程中更新的几种方式

通过简单的点击按钮来实现更新一张我女神的图片

测试效果:

效果图.gif
效果图.gif

首先我们要知道Handler的运行机制:

Handler运行机制之流程
Handler运行机制之流程

这里不再做过多的讲解。请参考

第一种方式

第一种方式.png
第一种方式.png

通过Handler发送post一个Runnable对象来实践,post源码:

11.png
11.png

111.png
111.png

post(Runnable r)-----> sendMessageDelayed(getPostMessage(r), 0);---->sendMessageAtTime。可以看出最终是通过sendMessageDelayed方法进行发送一个对象的,。

第二种方式

第二种方式.png
第二种方式.png

第二种方式是通handler的post方法。与第一种方式大同小异。

第三种方式

第三种方式.png
第三种方式.png

这种方式我们也经常用到。其实每部也是调用的是Handler的post方法,内部代码如下:

先判断当前的线程是否为主线程,如果是当前的线程是主线程,则直接运行,是非主线程的话,调用post方法。

第四种方式

第四种方式.png
第四种方式.png

这种方式直接调用的View里面的post

View中的post源码如下:

很多人都不知道,View自己内部也封装了自己的异步处理机制,从上面就可以看出,调用的是ViewRootImpl.getRunQueue()的post方法,而在Handler内部调用post的时候,先调用的是sendMessageDelayed方法,然后调用sendMessageAtTime方法,紧接着调用enqueueMessage,最终调用的是queue.enqueueMessage,最终执行的方式都是一样的。

最终效果图点击送一个美女:

效果图.gif
效果图.gif

测试用例项目地址:

github.com/androidstar…

更多文章

2017上半年技术文章集合—184篇文章分类汇总

那些年不容错过的智能刷新加载框

NDK项目实战—高仿360手机助手之卸载监听

高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画

一个实现录音和播放的小案例

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助, 欢迎加入微信公众号:终端研发部

技术+职场
技术+职场