Android面试中消息机制解答

来源:互联网 发布:mac的资料库在哪 编辑:程序博客网 时间:2024/05/21 18:36


小编总结一下最近面试遇到的关于Android消息机制的问题。
一 Loop.loop()死循环那为什么程序没有卡死
大家都知道 loop会无限循环MessageQueue中的Message实现UI的更新,但是死循环为什没有卡死线程。
Handler的机制是使用管道来实现的,MessageQueue没有消息时主线程会阻塞管道的读端,当MessageQueue又要处理的消息时,主线程会被唤醒。
大家需要理解Linux管道、epoll机制
二 如何确定消息来自哪个Handler

这个问题小编的理解是Message.target属性。

 public static void loop() {    for (;;) {//无限循环            Message msg = queue.next(); // might block            if (msg == null) {                // No message indicates that the message queue is quitting.                return;            }            try {                msg.target.dispatchMessage(msg);//获取Message的Handler 然后调用Handler分发 处理消息            } finally {                if (traceTag != 0) {                    Trace.traceEnd(traceTag);                }            }            msg.recycleUnchecked();        }    }


三 子线程可以创建Handler吗?
答案是肯定的
一个线程可以有多个Handler,但是只有一个MessageQueue和Loop。
子线程创建Handler之前需要创建Looper。Handler可以实现子线程之间传递消息。


以上是我的解答,欢迎大家指正。

原创粉丝点击