• Android Message和obtainMessage的区别


    类概述

    定义一个包含任意类型的描述数据对象,此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作。

    尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。

     

    1、首先创建Handler对象:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. private Handler mHandler = new Handler() {  
    2.   
    3.         public void handleMessage(android.os.Message msg) {  
    4.             switch (msg.what) {  
    5.             case 1:  
    6.                 textShowTV.setText("展示中...");  
    7.                 break;  
    8.             }  
    9.         };  
    10.           
    11.     };  
     

    2、然后是消息处理:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1.             //①,使用new Message()  
    2. //          Message mess = new Message();  
    3.             //②,使用Message.obtain()  
    4.             Message mess = Message.obtain();  
    5.             mess.what =1;  
    6.             //mHandler.obtainMessage(1)与上两行的代码一样,可以参考源码查看  
    7. //          Message mess = mHandler.obtainMessage(1);  
    8.             mHandler.sendMessage(mess);  


     
    通过比较我们会发现,这两种获取Message的实例的方法不一样,于是我看了源码,果然不一样:
     

    进入obtain方法:

     
    图1:
     

    进入Message方法:

     
    图2:
     
     

    查看obtainMessage()源码:

     
    图3:
       
     

    查看Message.obtain(this, what) 源码:

    图4:
     

    然后,再次点击obtain() 方法,代码又回归到了图1

     

    总结:

     
    上面的图1中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象
     
    如果是这人的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。
     
    from:http://blog.csdn.net/duqiuke/article/details/39577413
  • 相关阅读:
    [导入]更改sql2005中的时间默认格式 Virus
    [导入]OO系统分析员之路学习笔记一用例 Virus
    [导入]面向对象学习笔记三参与者 Virus
    [导入]word2007和powerdesigner12.5的问题导致鼠标 Virus
    [导入]面向对象学习笔记四需求分析的阶段划分 Virus
    [导入]关于接口和抽象类的一点小想法 Virus
    [导入]功夫在工作之外 Virus
    [导入]面向对象学习笔记面向对象和面向过程 Virus
    [导入]更改sql2005中的时间默认格式 Virus
    [导入]网页的版式设计—文字的格式化 Virus
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4932617.html
Copyright © 2020-2023  润新知