Android消息机制之Message

位置:/frameworks/base/core/java/android/os/Message.java


Message 中常用的变量,callback(Runnable), target(Handler),what(int),obj(Object)

/*package*/ Handler target;
/*package*/ Runnable callback;
public int what;
public Object obj;
  // sometimes we store linked lists of these things
/*package*/ Message next;
 
    private static final Object sPoolSync = new Object();
    private static Message sPool;
private static int sPoolSize = 0;
 
    private static final int MAX_POOL_SIZE = 50;

 

 

//构造方法

public Message() {
    }

 

 

获取空Message(推荐使用)

   public static Message obtain() {

        synchronized (sPoolSync) { //对一个变量进行加锁,进行同步控制

            if (sPool != null) {  //若不为空,则在消息池中取出空消息

                Message m = sPool;

                sPool = m.next;

                m.next = null;

                m.flags = 0; // clear in-use flag

                sPoolSize--;

                return m;

            }

        }

        return new Message();

    }

 

 

//

   /**
     * Sends this Message to the Handler specified by {@link #getTarget}.
     * Throws a null pointer exception if this field has not been set.
     */
    public void sendToTarget() {
        target.sendMessage(this);
    }

 

//一些常用的Message的函数

    public static Message obtain(Handler h, int what) {
        Message m = obtain();
        m.target = h;
        m.what = what;
 
        return m;
    }
/**
     * Same as {@link #obtain()}, but sets the values of the target, what, and obj
     * members.
     * @param h  The target value to set.
     * @paramwhat  The what value to set.
     * @paramobj  The object method to set.
     * @return  A Message object from the global pool.
     */
    public static Message obtain(Handler h, int what, Object obj) {
        Message m = obtain();
        m.target = h;
        m.what = what;
        m.obj = obj;
 
        return m;
    }

 

补充:

1.尽管Messagepublic的默认构造方法,但是你应该通过Message.obtain()来从消息池中获得空消息对象,以节省资源。

2.如果你的message只需要携带简单的int信息,请优先使用Message.arg1Message.arg2来传递信息,这比用Bundle更省内存

3.擅用message.what来标识信息,以便用不同方式处理message

 

 

更多相关文章

  1. Android 获取imei号码,获取手机型号和系统版本号等信息
  2. android 获取手机的信息
  3. Android luancher消息提醒-ShortcutBadger
  4. Android EditText 限制文本框输入的长度和提示信息
  5. Android中查看网卡设备信息
  6. [学习笔记] Android群英传:Android系统信息和安全机制
  7. android 获取手机通讯录信息
  8. Android基础系列-----------Android进程/线程管理应用示例(Androi
  9. Android ADB=Android Debug Bridge帮助信息

随机推荐

  1. Android全局变量使用
  2. android Handler 优势和劣势【原创】
  3. The lifecycle of an android applicatio
  4. 文件编码的测试(android)
  5. 使用WIFI连接android进行调试和adb操作
  6. 【Android】使用dex2jar 与JD-Gui 反编译
  7. [Android] 一键修改从网上厨房制作的Andr
  8. Android之自动文本输入识别提示
  9. android 查看解压后的.xml文件代码(axmlpr
  10. AIR Native Extension的使用(Android)二