FileDocCategorySizeDatePackage
Message.javaAPI DocAndroid 1.5 API12370Wed May 06 22:41:56 BST 2009android.os

Message

public final class Message extends Object implements android.os.Parcelable
Defines a message containing a description and arbitrary data object that can be sent to a {@link Handler}. This object contains two extra int fields and an extra object field that allow you to not do allocations in many cases.

While the constructor of Message is public, the best way to get one of these is to call {@link #obtain Message.obtain()} or one of the {@link Handler#obtainMessage Handler.obtainMessage()} methods, which will pull them from a pool of recycled objects.

Fields Summary
public int
what
User-defined message code so that the recipient can identify what this message is about. Each {@link Handler} has its own name-space for message codes, so you do not need to worry about yours conflicting with other handlers.
public int
arg1
arg1 and arg2 are lower-cost alternatives to using {@link #setData(Bundle) setData()} if you only need to store a few integer values.
public int
arg2
arg1 and arg2 are lower-cost alternatives to using {@link #setData(Bundle) setData()} if you only need to store a few integer values.
public Object
obj
An arbitrary object to send to the recipient. This must be null when sending messages across processes.
public Messenger
replyTo
Optional Messenger where replies to this message can be sent.
long
when
android.os.Bundle
data
Handler
target
Runnable
callback
Message
next
private static Object
mPoolSync
private static Message
mPool
private static int
mPoolSize
private static final int
MAX_POOL_SIZE
public static final Parcelable.Creator
CREATOR
Constructors Summary
public Message()
Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}).

    
Methods Summary
voidclearForRecycle()

        what = 0;
        arg1 = 0;
        arg2 = 0;
        obj = null;
        replyTo = null;
        when = 0;
        target = null;
        callback = null;
        data = null;
    
public voidcopyFrom(Message o)
Make this message like o. Performs a shallow copy of the data field. Does not copy the linked list fields, nor the timestamp or target/callback of the original message.

        this.what = o.what;
        this.arg1 = o.arg1;
        this.arg2 = o.arg2;
        this.obj = o.obj;
        this.replyTo = o.replyTo;

        if (o.data != null) {
            this.data = (Bundle) o.data.clone();
        } else {
            this.data = null;
        }
    
public intdescribeContents()

        
       
        return 0;
    
public java.lang.RunnablegetCallback()
Retrieve callback object that will execute when this message is handled. This object must implement Runnable. This is called by the target {@link Handler} that is receiving this Message to dispatch it. If not set, the message will be dispatched to the receiving Handler's {@link Handler#handleMessage(Message Handler.handleMessage())}.

        return callback;
    
public android.os.BundlegetData()
Obtains a Bundle of arbitrary data associated with this event, lazily creating it if necessary. Set this value by calling {@link #setData(Bundle)}.

        if (data == null) {
            data = new Bundle();
        }
        
        return data;
    
public HandlergetTarget()
Retrieve the a {@link android.os.Handler Handler} implementation that will receive this message. The object must implement {@link android.os.Handler#handleMessage(android.os.Message) Handler.handleMessage()}. Each Handler has its own name-space for message codes, so you do not need to worry about yours conflicting with other handlers.

        return target;
    
public longgetWhen()
Return the targeted delivery time of this message, in milliseconds.

        return when;
    
public static Messageobtain()
Return a new Message instance from the global pool. Allows us to avoid allocating new objects in many cases.

    
                            
        
        synchronized (mPoolSync) {
            if (mPool != null) {
                Message m = mPool;
                mPool = m.next;
                m.next = null;
                return m;
            }
        }
        return new Message();
    
public static Messageobtain(Message orig)
Same as {@link #obtain()}, but copies the values of an existing message (including its target) into the new one.

param
orig Original message to copy.
return
A Message object from the global pool.

        Message m = obtain();
        m.what = orig.what;
        m.arg1 = orig.arg1;
        m.arg2 = orig.arg2;
        m.obj = orig.obj;
        m.replyTo = orig.replyTo;
        if (orig.data != null) {
            m.data = new Bundle(orig.data);
        }
        m.target = orig.target;
        m.callback = orig.callback;

        return m;
    
public static Messageobtain(Handler h)
Same as {@link #obtain()}, but sets the value for the target member on the Message returned.

param
h Handler to assign to the returned Message object's target member.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;

        return m;
    
public static Messageobtain(Handler h, java.lang.Runnable callback)
Same as {@link #obtain(Handler)}, but assigns a callback Runnable on the Message that is returned.

param
h Handler to assign to the returned Message object's target member.
param
callback Runnable that will execute when the message is handled.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;
        m.callback = callback;

        return m;
    
public static Messageobtain(Handler h, int what)
Same as {@link #obtain()}, but sets the values for both target and what members on the Message.

param
h Value to assign to the target member.
param
what Value to assign to the what member.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;
        m.what = what;

        return m;
    
public static Messageobtain(Handler h, int what, java.lang.Object obj)
Same as {@link #obtain()}, but sets the values of the target, what, and obj members.

param
h The target value to set.
param
what The what value to set.
param
obj The object method to set.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;
        m.what = what;
        m.obj = obj;

        return m;
    
public static Messageobtain(Handler h, int what, int arg1, int arg2)
Same as {@link #obtain()}, but sets the values of the target, what, arg1, and arg2 members.

param
h The target value to set.
param
what The what value to set.
param
arg1 The arg1 value to set.
param
arg2 The arg2 value to set.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;
        m.what = what;
        m.arg1 = arg1;
        m.arg2 = arg2;

        return m;
    
public static Messageobtain(Handler h, int what, int arg1, int arg2, java.lang.Object obj)
Same as {@link #obtain()}, but sets the values of the target, what, arg1, arg2, and obj members.

param
h The target value to set.
param
what The what value to set.
param
arg1 The arg1 value to set.
param
arg2 The arg2 value to set.
param
obj The obj value to set.
return
A Message object from the global pool.

        Message m = obtain();
        m.target = h;
        m.what = what;
        m.arg1 = arg1;
        m.arg2 = arg2;
        m.obj = obj;

        return m;
    
public android.os.BundlepeekData()
Like getData(), but does not lazily create the Bundle. A null is returned if the Bundle does not already exist.

        return data;
    
private final voidreadFromParcel(android.os.Parcel source)

        what = source.readInt();
        arg1 = source.readInt();
        arg2 = source.readInt();
        when = source.readLong();
        data = source.readBundle();
        replyTo = Messenger.readMessengerOrNullFromParcel(source);
    
public voidrecycle()
Return a Message instance to the global pool. You MUST NOT touch the Message after calling this function -- it has effectively been freed.

        synchronized (mPoolSync) {
            if (mPoolSize < MAX_POOL_SIZE) {
                clearForRecycle();
                
                next = mPool;
                mPool = this;
            }
        }
    
public voidsendToTarget()
Sends this Message to the Handler specified by {@link #getTarget}. Throws a null pointer exception if this field has not been set.

        target.sendMessage(this);
    
public voidsetData(android.os.Bundle data)
Sets a Bundle of arbitrary data values. Use arg1 and arg1 members as a lower cost way to send a few simple integer values, if you can.

        this.data = data;
    
public voidsetTarget(Handler target)

        this.target = target;
    
public java.lang.StringtoString()

        StringBuilder   b = new StringBuilder();
        
        b.append("{ what=");
        b.append(what);

        b.append(" when=");
        b.append(when);

        if (arg1 != 0) {
            b.append(" arg1=");
            b.append(arg1);
        }

        if (arg2 != 0) {
            b.append(" arg2=");
            b.append(arg2);
        }

        if (obj != null) {
            b.append(" obj=");
            b.append(obj);
        }

        b.append(" }");
        
        return b.toString();
    
public voidwriteToParcel(android.os.Parcel dest, int flags)

        if (obj != null || callback != null) {
            throw new RuntimeException(
                "Can't marshal objects across processes.");
        }
        dest.writeInt(what);
        dest.writeInt(arg1);
        dest.writeInt(arg2);
        dest.writeLong(when);
        dest.writeBundle(data);
        Messenger.writeMessengerOrNullToParcel(replyTo, dest);