Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2006 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package android.os;
 
Defines a message containing a description and arbitrary data object that can be sent to a 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 Message.obtain() or one of the Handler.obtainMessage() methods, which will pull them from a pool of recycled objects.

 
 public final class Message implements Parcelable {
    
User-defined message code so that the recipient can identify what this message is about. Each Handler has its own name-space for message codes, so you do not need to worry about yours conflicting with other handlers.
 
     public int what;

    
arg1 and arg2 are lower-cost alternatives to using setData() if you only need to store a few integer values.
 
     public int arg1

    
arg1 and arg2 are lower-cost alternatives to using setData() if you only need to store a few integer values.
 
     public int arg2;

    
An arbitrary object to send to the recipient. When using Messenger to send the message across processes this can only be non-null if it contains a Parcelable of a framework class (not one implemented by the application). For other data transfer use setData(android.os.Bundle).

Note that Parcelable objects here are not supported prior to the Build.VERSION_CODES.FROYO release.

 
     public Object obj;

    
Optional Messenger where replies to this message can be sent. The semantics of exactly how this is used are up to the sender and receiver.
 
     public Messenger replyTo;
     
     /*package*/ long when;
     
     /*package*/ Bundle data;
     
     /*package*/ Handler target;     
     
     /*package*/ Runnable callback;   
     
     // sometimes we store linked lists of these things
     /*package*/ Message next;
 
     private static Object mPoolSync = new Object();
     private static Message mPool;
     private static int mPoolSize = 0;
 
     private static final int MAX_POOL_SIZE = 10;
    
    
Return a new Message instance from the global pool. Allows us to avoid allocating new objects in many cases.
 
     public static Message obtain() {
         synchronized () {
             if ( != null) {
                Message m = ;
                 = m.next;
                m.next = null;
                return m;
            }
        }
        return new Message();
    }

    
Same as obtain(), but copies the values of an existing message (including its target) into the new one.

Parameters:
orig Original message to copy.
Returns:
A Message object from the global pool.
    public static Message obtain(Message orig) {
        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;
    }

    
Same as obtain(), but sets the value for the target member on the Message returned.

Parameters:
h Handler to assign to the returned Message object's target member.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler h) {
        Message m = obtain();
        m.target = h;
        return m;
    }

    
Same as obtain(android.os.Handler), but assigns a callback Runnable on the Message that is returned.

Parameters:
h Handler to assign to the returned Message object's target member.
callback Runnable that will execute when the message is handled.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler hRunnable callback) {
        Message m = obtain();
        m.target = h;
        m.callback = callback;
        return m;
    }

    
Same as obtain(), but sets the values for both target and what members on the Message.

Parameters:
h Value to assign to the target member.
what Value to assign to the what member.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler hint what) {
        Message m = obtain();
        m.target = h;
        m.what = what;
        return m;
    }

    
Same as obtain(), but sets the values of the target, what, and obj members.

Parameters:
h The target value to set.
what The what value to set.
obj The object method to set.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler hint whatObject obj) {
        Message m = obtain();
        m.target = h;
        m.what = what;
        m.obj = obj;
        return m;
    }

    
Same as obtain(), but sets the values of the target, what, arg1, and arg2 members.

Parameters:
h The target value to set.
what The what value to set.
arg1 The arg1 value to set.
arg2 The arg2 value to set.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler hint whatint arg1int arg2) {
        Message m = obtain();
        m.target = h;
        m.what = what;
        m.arg1 = arg1;
        m.arg2 = arg2;
        return m;
    }

    
Same as obtain(), but sets the values of the target, what, arg1, arg2, and obj members.

Parameters:
h The target value to set.
what The what value to set.
arg1 The arg1 value to set.
arg2 The arg2 value to set.
obj The obj value to set.
Returns:
A Message object from the global pool.
    public static Message obtain(Handler hint what
            int arg1int arg2Object obj) {
        Message m = obtain();
        m.target = h;
        m.what = what;
        m.arg1 = arg1;
        m.arg2 = arg2;
        m.obj = obj;
        return m;
    }

    
Return a Message instance to the global pool. You MUST NOT touch the Message after calling this function -- it has effectively been freed.
    public void recycle() {
        synchronized () {
            if ( < ) {
                clearForRecycle();
                
                 = ;
                 = this;
            }
        }
    }

    
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.
    public void copyFrom(Message o) {
        this. = o.what;
        this. = o.arg1;
        this. = o.arg2;
        this. = o.obj;
        this. = o.replyTo;
        if (o.data != null) {
            this. = (Bundleo.data.clone();
        } else {
            this. = null;
        }
    }

    
Return the targeted delivery time of this message, in milliseconds.
    public long getWhen() {
        return ;
    }
    
    public void setTarget(Handler target) {
        this. = target;
    }

    
Retrieve the a Handler implementation that will receive this message. The object must implement 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.
    public Handler getTarget() {
        return ;
    }

    
Retrieve callback object that will execute when this message is handled. This object must implement Runnable. This is called by the target Handler that is receiving this Message to dispatch it. If not set, the message will be dispatched to the receiving Handler's Handler.handleMessage(Message Handler.handleMessage()).
    public Runnable getCallback() {
        return ;
    }
    
    
Obtains a Bundle of arbitrary data associated with this event, lazily creating it if necessary. Set this value by calling setData(android.os.Bundle). Note that when transferring data across processes via Messenger, you will need to set your ClassLoader on the Bundle via Bundle.setClassLoader() so that it can instantiate your objects when you retrieve them.

    public Bundle getData() {
        if ( == null) {
             = new Bundle();
        }
        
        return ;
    }

    
Like getData(), but does not lazily create the Bundle. A null is returned if the Bundle does not already exist. See getData() for further information on this.

    public Bundle peekData() {
        return ;
    }

    
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.

    public void setData(Bundle data) {
        this. = data;
    }

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

    
Constructor (but the preferred way to get a Message is to call Message.obtain()).
    public Message() {
    }
    public String toString() {
        StringBuilder   b = new StringBuilder();
        
        b.append("{ what=");
        b.append();
        b.append(" when=");
        b.append();
        if ( != 0) {
            b.append(" arg1=");
            b.append();
        }
        if ( != 0) {
            b.append(" arg2=");
            b.append();
        }
        if ( != null) {
            b.append(" obj=");
            b.append();
        }
        b.append(" }");
        
        return b.toString();
    }
    public static final Parcelable.Creator<MessageCREATOR
            = new Parcelable.Creator<Message>() {
        public Message createFromParcel(Parcel source) {
            Message msg = Message.obtain();
            msg.readFromParcel(source);
            return msg;
        }
        
        public Message[] newArray(int size) {
            return new Message[size];
        }
    };
        
    public int describeContents() {
        return 0;
    }
    public void writeToParcel(Parcel destint flags) {
        if ( != null) {
            throw new RuntimeException(
                "Can't marshal callbacks across processes.");
        }
        dest.writeInt();
        dest.writeInt();
        dest.writeInt();
        if ( != null) {
            try {
                Parcelable p = (Parcelable);
                dest.writeInt(1);
                dest.writeParcelable(pflags);
            } catch (ClassCastException e) {
                throw new RuntimeException(
                    "Can't marshal non-Parcelable objects across processes.");
            }
        } else {
            dest.writeInt(0);
        }
        dest.writeLong();
        dest.writeBundle();
        Messenger.writeMessengerOrNullToParcel(dest);
    }
    private final void readFromParcel(Parcel source) {
         = source.readInt();
         = source.readInt();
         = source.readInt();
        if (source.readInt() != 0) {
             = source.readParcelable(getClass().getClassLoader());
        }
         = source.readLong();
         = source.readBundle();
         = Messenger.readMessengerOrNullFromParcel(source);
    }
New to GrepCode? Check out our FAQ X