Android Handler源码分析


本篇内容主要讲解“AndroidHandler源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“AndroidHandler源码分析”吧!1.android 消息循环有4个重要的类Ha免费云主机域名ndler、Message、Looper、MessageQueuehandler 用来发送、处理消息。Message 是消息的载体。MessageQueue 是一个消息队列,既然是队列,就有入队、出队的处理。Looper 创建一个消息循环。不断的从MessageQueue中读取消息、并分发给相应的Handler进行处理。2.我们都知道main函数是Java程序的入口,android程序也不例外。android App的唯一入口就是ActivityThread中的 main函数。 这个函数是由Zygote创建app进程后 通过反射的方式调用的。当一个App启动时,会先执行这个main方法,在ActivityThread,main方法中,3. 首先看Looper是如何创建的。至此,创建的代码执行完毕。总结一句话就是,app启动时,会创建Looper,并且保证一个线程只能创建一个Looper。创建Looper的同时,也创建的消息队列 MessageQueue。这些都是消息循环的准备工作。通过Looper.loop,这个消息循环就跑起来了。4.在MessageQueue中enqueueMessage()插入消息、next()提取消息方法。提取消息:handler会涉及到native的代码。在native层使用的epoll机制,这个后面在深入分享。5. 至此,整个消息循环大体的流程已经完成。但是关于handler的面试题很多。比如为啥handler会导致Activity内存泄漏?如何解决?内存泄漏的本质就是长声明周期对象持有短声明周期对象的引用,导致短声明周期对象,不再使用但内存却无法被回收。我们知道handler作为Activity的内部类,持有外部类的引用,所以整个引用链是Activity–>handler–>Message–>MessageQueue.当activity退出后,如果消息为来的及处理,就有可能会导致Activity无法被GC回收,从而导致内存泄漏。handler.post(),发送的消息执行在子线程还是主线程?下面来看消息池。消息池也是一个单项链表,长度是50.静态对象sPool就是消息队列的头部Message。每次获取消息时,都会返回消息池中第一个对象。到此,相信大家对“AndroidHandler源码分析”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: 微信小程序怎么实现列表渲染

这篇文章主要讲解了“微信小程序怎么实现列表渲染”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序怎么实现列表渲染”吧!通过wx:for可以根据指定的数组,循环渲染重复的组件结构,语法示例如下: 索引是:{…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/31 10:35
Next 03/31 10:35

相关推荐