Handler Looper MessageQueue HandlerThread

1. MainUI Thread: 已实现了looper;

2. 自定义thread: 在run()中用Looper.prepare()创建thread单例模式looper,存在线程本地存储TLS中,looper有一个私有变量messageQueue;Looper.loop()该thread开始围绕消息队列循环运行,直到looper.quit();当消息队列中没有message时阻塞thread;

3. Handler: 用于向对应thread的messageQueue中发送message;handler中有一个私有变量looper,如不明确复制,通过Looper.myLooper()赋予正在运行的thread的looper和messageQueue;new Handler(Looper.getMainLooper())可以定义向MainUI thread发送message的handler;

4. Message: 消息载体,通过字段what、arg1标识消息,可在handler的handleMessage(msg)中处理msg;

5. HandlerThread:实现了looper的thread,同时同步处理了获取looper的问题;需要获得looper可用该便利类;通过new Handler(handlerThread.getLooper())声明该thread对应的handler;

6. 一个thread只能有一个looper,一个messageQueue,如重复调用Looper.prepare()会抛出RuntimeException;但可有多个handler;

7. Native的支持:4.0为了方便c编程,native层增加了类似Java中的handler-looper-messageQueue机制,但同一个thread中native的处理顺序在Java层之前;

posted @ 2012-08-30 18:51  TovenZhou  阅读(228)  评论(0编辑  收藏  举报