Handle的传递机制,Handle Looper MessageQueue的工作原理
2018-03-17 08:50
330 查看
因为只有主线程能修改UI组件,所以主线程又被称作UI线程;但是若只由主线程来修改UI的话,这样会导致新启动的线程无法动态改变UI的属性值或者是进行耗时操作,主线程会被阻塞(ANR异常,系统无法响应输入事件和BroadCast),而子线程又不能修改UI组件,只能在新进程里发出一通消息,这时就需要采用handle的传递机制;
Handle的作用有两个:在新启动的线程发送消息(一般采用sendEmptyMessage);在主线程接受,处理消息(重写handleMessage);
笔记本有原理图;
MessageQueue采用先进先出的方式管理消息,Looper会在其中构造一个Looper对象,MessageQueue是由Looper来管理的,初始化Looper时会创建一个与之相关联的MessageQueue,所以必须保证每个线程都有一个Looper;为了保证当前线程有一个Looper对象,分两种情况:
1.新创建的线程就是在主线程中,这样就无需创建Looper对象,系统已经自动创建了;
2.新创建的线程是自创的子线程(Thread),这样就需要自己获取Looper对象并启动它;通过调用Looper的prepare()方法即可获取Looper对象,然后在调用Looper的静态方法loop()来启动它;
Handle的作用有两个:在新启动的线程发送消息(一般采用sendEmptyMessage);在主线程接受,处理消息(重写handleMessage);
笔记本有原理图;
MessageQueue采用先进先出的方式管理消息,Looper会在其中构造一个Looper对象,MessageQueue是由Looper来管理的,初始化Looper时会创建一个与之相关联的MessageQueue,所以必须保证每个线程都有一个Looper;为了保证当前线程有一个Looper对象,分两种情况:
1.新创建的线程就是在主线程中,这样就无需创建Looper对象,系统已经自动创建了;
2.新创建的线程是自创的子线程(Thread),这样就需要自己获取Looper对象并启动它;通过调用Looper的prepare()方法即可获取Looper对象,然后在调用Looper的静态方法loop()来启动它;
相关文章推荐
- Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
- Handle的消息传递机制
- Handler消息传递机制——Handler、Loop、MessageQueue的工作原理
- Handler消息传递机制(二)Handler,Loop,Message,MessageQueue的工作原理
- Hanlder消息传递机制及其工作原理
- Handle 消息传递机制知识点汇总
- C#参数传递机制
- handler消息传递机制
- iOS中消息的传递机制
- 【菜鸟C++学习笔记】23. 对象的传递机制
- android消息传递机制
- 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
- android消息传递机制
- Android Touch事件传递机制详解
- ASP.net状态保存机制及ViewState 工作原理
- 【Android】【Framework】Android事件分发(传递)机制
- JVM工作原理、机制。
- Android Touch事件传递机制
- View 事件传递机制
- (转)Android ViewGroup中事件触发和传递机制