跳到主要内容

简述Message对象创建的方式有哪些 & 区别 ?

参考答案:

Message对象在Android开发过程中有多种创建方式,主要包括以下三种:

  1. 使用无参构造函数创建:这是最常用的方式,通过new Message()直接创建一个新的Message对象。每次使用这种方式,都会在内存中创建一个新的Message对象。
  2. 使用Message.obtain()方法创建:这个方法及其系列的重载方法是从Message池中获取一个新的Message实例。Message池使用Message链表结构实现,消息池默认最大值50。消息在loop中被Handler分发消费之后会执行回收的操作,将该消息内部数据清空并添加到消息链表的表头。这种方式的好处是避免频繁创建对象,提高资源利用率。
  3. 通过Handler的的obtainMessage()方法创建:这种方式也是获取一个Message实例,其内部实际上也是调用了obtain()方法。与直接调用Message.obtain()类似,这也是从Message池中获取对象,从而避免了重复创建。

这三种方式的主要区别在于对象的创建和复用

  • 第一种方式每次都会创建一个新的Message对象,可能会导致内存中的对象数量增加,特别是在频繁创建和销毁Message对象的情况下。
  • 第二和第三种方式则是从Message池中获取对象,如果池中有可用的对象,就直接返回该对象,否则才创建新的对象。这种方式可以有效地减少内存中的对象数量,提高程序的性能。

总的来说,为了优化性能和资源利用,建议优先使用Message.obtain()或Handler的obtainMessage()方法来创建Message对象,尤其是在需要频繁创建和销毁Message对象的情况下。