Message Pool分析

本文详细探讨了Android中Message Pool的运作机制,分析了Message是如何通过`obtain()`方法从池中获取,以及Message Pool如何避免导致OOM。通过源代码分析,揭示Message Pool是一个链表结构,最大容量为50,当超过此限制时,超出的Message会被丢弃并由GC回收。总结指出,Message Pool不会引发应用的OOM问题。
摘要由CSDN通过智能技术生成

引言

Android中,我们在线程之间通信传递通常採用Android的消息机制,而这机制传递的正是Message。

通常。我们使用Message.obtain()和Handler.obtainMessage()从Message Pool中获取Message。避免直接构造Message。

那么Android会否由于Message Pool缓存的Message对象而造成OOM呢?

对于这个问题,我能够明白的说APP不会因Message Pool而OOM。至于为什么,能够一步步往下看,心急的能够直接看最后一节——Message Pool怎样存放Message。

Obtain分析

Handler.obtainMessage()源代码:

    /**
     * Returns a new {@link android.os.Message Message} from the global message pool. More efficient than
     * creating and allocating new instances. The retrieved message has its handler set to this instance (Message.target == this).
     *  If you don't want that facility, just call Message.obtain() instead.
     */
    public final Message obtainMessage()
    {
        return Message.obtain(this);
    }

显然。Handler.obtain()是调用Message.obtain()来获取的。那么我门再来看下Mess

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值