Dispatcher、Handler/Looper

  通过操作系统的支持,每个thread对应一个消息队列,及该thread可以处理的消息,屏蔽的消息,通常为带优先级的消息队列,UI线程的消息队列中前端显示的消息优先级较高,操作系统接收到硬件或者软件消息后将消息加入到该队列中,每个消息对应一个消息处理函数,在windows phone中为DispatcherOpertion,默认为每个thread分配了消息队列处理对象Dispatcher,为方便Page和控件Image中默认加入了Dispatcher属性,通过Dispatcher.Invoke(消息处理函数)的方式加入消息队列;在Android中为Runnable,通过在该thread中声明一个handler,通过handler.Post(Runnable,delaytime)加入消息队列,通过每个消息队列对应一个唯一的消息队列处理调用函数;Dispatcher、Handler/Looper负责处理消息队列的消息入队、消息优先级排序、消息函数调用、消息出队等。

  windows phone应用程序的线程通常由UI线程、render线程、worker线程三种组成,一个App有唯一的render线程、通常有一个UI线程、多个网络处理等的后台处理worker线程,在多个线程之间的同步通讯时,需要用到Dispatch,以实现同步处理,例如网络下载完图片后向UI线程发送消息渲染Image。

  UI线程负责创建UI对象、建立UI对象树、布局、处理用户触控交互时间、开启其它线程等,在UI线程中最好不要有大量消耗时间的操作,保障对用户交互操作的顺畅;render线程处理具体UI的渲染,此时UI的size、layout都应该已经确定,transform、animation的处理可以使用GPU的硬件处理使得渲染等UI操作较为高效。

  Android应用程序的线程由UI主线程、worker线程组成,无默认的render线程,所有UI的布局、渲染等操作都在UI主线程中进行。

原文地址:https://www.cnblogs.com/toven/p/2236350.html