今天需要研究 WindowManagerService 如何把Event. 丢给当前的Activity.
ViewRoot这个类在android的UI结构中扮演的是一个中间者的角色,连接的是PhoneWindow跟WindowManagerService.在每个PhoneWindow创建的时候,系统都会向WindowManger中的一个保存View数组增加PhoneWindow的DecorView对象,WindowManger在保存好这个View对象的同时,也会新创建一个ViewRoot对象用来沟通WindowManagerService。可以查看WindowManagerImpl跟 ViewRoot中的代码,臧春杰同时ViewRoot中我们可以看到一个W类型,该类型派生自IWindow.stubIwindowSession则是WindowManagerService中的远程调用接口,创建了一个PhoneWindow,也就创建了一个ViewRoot,并将在 WindowManagerService注册。接下来简单的看下KeyEvent的传递。qisda changer在WindowManagerService中
focus.mClient.dispatchKey(event);
这个段代码的mClient则就是ViewRoot中的W类型,通过远程调用,可以看看ViewRoot的处理:
boolean handled = mView != null? mView.dispatchKeyEventPreIme
接下来就到了mDecor里,也就是整个View树的根。然后比较臧春杰代码坐标判断是哪个View. 如果不在任何View范围里,就把消息给PhoneWindow.因为实现了Activity的CallBack 在Window不处理时候给Activity.
哎,还是非常模糊,好多东西不细致,理解不透彻。怎么办呢?
Handler.java
都知道Handler主要用来做线程间通信,为什么要用线程间通信? 如何进行通信?
Uithread要做定时更新,需要另外一个线程提供定时然后通知ui。
如何通信。用handle sendMessage postMessage等。 需要理轻 Handler 和那个线程绑定的。 如何判别?
一个线程有个Looper管理一个MessageQueu Uithread已经实现了这个Looper . 也有个这个队列。
Looper.getMainLooper返回了UI臧春杰代码线程的Looper。 New Handler(这个UILooper) 那么这个Hander就和UI绑定了。
如果 要自己创建线程。实现消息队列。 Looper.prepare 创建消息队列。 Looper.loop开始循环。
然后创建handler(Looper.myLooper) 实现帮定。
Handler和谁绑定有looper决定。
Uithread已经有Looper,可以直接使用。创建空的handler就是绑定主线程。
我们自己的线程需通过prepare loop 创建消息队列。
分享到:
相关推荐
android 中Handler 的几种写法,很简单的demo,大神简单修改下,用的是Handler.Callback,的方法
Android的Handler使用方法总结,不错的文档,跟大家分享分享
手写一套Java的Handler程序,深入理解Android消息机制
1.handler是什么? 2.handler怎么用? 3.为什么要用handler?
import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * 创建一个...
Android中handler的使用,处理多线程的使用
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
android Handler的使用,我也刚开始学习,从别处下载了给大家分享
android handler的一些测试,套用他人的代码做的一些测试,多个线程sendmessage,该由那个handler处理?
在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html
Android Handler传值的,简单的介绍了Handler的用法
【Android开发入门】Android线程之Handler
以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……
这个资源主要有三个Demo文件 是用来展示Handler的异步处理消息的 第一个Demo展示了如何启动线程和暂停线程 第二个Demo采用了Handler的消息队列机制 第三个Demo用HandlerThread的looper来构造一个handler,然后该...
Android中的Handler很重要,但是很简单,学好Handler很重要~
android handler java 线程 handler理解
Android Handler Looper
android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。
一个简单的时钟程序。用于新手对线程,handler,message等的理解