Android handler机制简陋描述(golang)
2017-09-27 18:01
260 查看
Android是消息驱动,在线程间通讯方面为开发者提供了Handler-Looper机制。Android中的Handler机制,blablabla……此处省略若干字~~~~,总之就是个生产者消费者模型。
Handler机制中,要素有3个:
Looper
Handler
Message
Looper
Looper有一个MessageQueue,Looper主要工作不停地从MessageQueue中取出消息,根据消息的Target分发。
Handler机制中,要素有3个:
Looper
Handler
Message
Looper
Looper有一个MessageQueue,Looper主要工作不停地从MessageQueue中取出消息,根据消息的Target分发。
type Looper struct { MessageQueue chan *Message } var mainLooper Looper var once sync.Once func (l *Looper)GetMainLooper() *Looper { once.Do(func() { mq := make(chan *Message, 300) mainLooper = Looper{MessageQueue:mq} }) return &mainLooper } func (l *Looper)Prepare() { if l == &mainLooper { panic(" - -、") } l.MessageQueue = make(chan *Message, 300) } func (l *Looper)Loop() { for { m := <-l.MessageQueue m.Target.Callback(m) } }
Handler
Handler主要包含一个Looper和一个回调函数。Handler发送消息时将消息打上标记(Target),然后将其加入Looper的MessageQueue。type Handler struct { looper *Looper Callback func(*Message) } func (h *Handler)Post(msg *Message) { msg.Target = h h.looper.MessageQueue <- msg }
Message
Message为消息,除了包含一些简单的数据外,还持有一个Handler引用(指针)为Target成员变量。type Message struct { What int Arg1 int Arg2 int Target *Handler }
Have a try
func main() { var l Looper // 获取MainLooper,当然也可以创建一个新的。这里是强行模拟Android主线程的套路 mLooper := l.GetMainLooper() // 创建一个Handler,它的looper为MainLooper。回调方法只是简单地输出Message中What变量的值 h := &Handler{looper:mLooper, Callback:func(msg *Message) { fmt.Println("Looper goroutine...") fmt.Println(msg.What) }} defer mLooper.Loop() // 异步循环获取用户输入 go func() { for { var i int _, err := fmt.Scan(&i) if err != nil { continue }else { // 将用户输入的数值作为消息发送 h.Post(&Message{What:i}) if i < 0 { os.Exit(0) } } } }() }
相关文章推荐
- Android中的Handler机制
- Android Market应用商店优化-关键词及描述
- Android Handler机制和ThreadLocal的应用
- 描述Android系统在视频播放时来电话的解决方案
- [置顶] Android源码分析——Looper,Messagequeue,Message,handler初始化及handler机制简介
- Android中的Handler机制
- Android Handler机制
- Android Handler机制的原理
- 【android】Handler机制的原理
- Android中的Handler机制(一)
- Android Handler机制
- Android之Handler机制
- android handler机制的原理
- Android Handler机制
- android Handler机制之ThreadLocal详解
- Android(安卓)权限中文描述大全
- android database 常用字段描述
- Android 中各种JAVA 包的功能描述
- Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
- 【Android】Handler机制源码详解(二)