Message.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines a message containing a description and arbitrary data object that can be 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sent to a {@link Handler}. This object contains two extra int fields and an 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * extra object field that allow you to not do allocations in many cases. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p class="note">While the constructor of Message is public, the best way to get 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one of these is to call {@link #obtain Message.obtain()} or one of the 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Handler#obtainMessage Handler.obtainMessage()} methods, which will pull 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * them from a pool of recycled objects.</p> 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Message implements Parcelable { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * User-defined message code so that the recipient can identify 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * what this message is about. Each {@link Handler} has its own name-space 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for message codes, so you do not need to worry about yours conflicting 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with other handlers. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int what; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Use these fields instead of using the class's Bundle if you can. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** arg1 and arg2 are lower-cost alternatives to using {@link #setData(Bundle) setData()} 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if you only need to store a few integer values. */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg1; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** arg1 and arg2 are lower-cost alternatives to using {@link #setData(Bundle) setData()} 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if you only need to store a few integer values.*/ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int arg2; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** An arbitrary object to send to the recipient. This must be null when 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sending messages across processes. */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object obj; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Optional Messenger where replies to this message can be sent. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Messenger replyTo; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ long when; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Bundle data; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Handler target; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Runnable callback; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // sometimes we store linked lists of these things 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Message next; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static Object mPoolSync = new Object(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static Message mPool; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static int mPoolSize = 0; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MAX_POOL_SIZE = 10; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new Message instance from the global pool. Allows us to 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * avoid allocating new objects in many cases. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain() { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mPoolSync) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPool != null) { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = mPool; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPool = m.next; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.next = null; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but copies the values of an existing 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message (including its target) into the new one. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param orig Original message to copy. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Message orig) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = orig.what; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = orig.arg1; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = orig.arg2; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = orig.obj; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.replyTo = orig.replyTo; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (orig.data != null) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.data = new Bundle(orig.data); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = orig.target; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = orig.callback; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the value for the <em>target</em> member on the Message returned. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain(Handler)}, but assigns a callback Runnable on 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message that is returned. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Handler to assign to the returned Message object's <em>target</em> member. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callback Runnable that will execute when the message is handled. 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, Runnable callback) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.callback = callback; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values for both <em>target</em> and 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>what</em> members on the Message. 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h Value to assign to the <em>target</em> member. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what Value to assign to the <em>what</em> member. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, and <em>obj</em> 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * members. 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>object</em> method to set. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, Object obj) { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, and <em>arg2</em> members. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, int arg1, int arg2) { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Same as {@link #obtain()}, but sets the values of the <em>target</em>, <em>what</em>, 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>arg1</em>, <em>arg2</em>, and <em>obj</em> members. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h The <em>target</em> value to set. 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param what The <em>what</em> value to set. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg1 The <em>arg1</em> value to set. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param arg2 The <em>arg2</em> value to set. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj The <em>obj</em> value to set. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A Message object from the global pool. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Message obtain(Handler h, int what, 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int arg1, int arg2, Object obj) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message m = obtain(); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.target = h; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.what = what; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg1 = arg1; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.arg2 = arg2; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m.obj = obj; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a Message instance to the global pool. You MUST NOT touch 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Message after calling this function -- it has effectively been 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * freed. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void recycle() { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mPoolSync) { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPoolSize < MAX_POOL_SIZE) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearForRecycle(); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project next = mPool; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPool = this; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make this message like o. Performs a shallow copy of the data field. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not copy the linked list fields, nor the timestamp or 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * target/callback of the original message. 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void copyFrom(Message o) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.what = o.what; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg1 = o.arg1; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.arg2 = o.arg2; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.obj = o.obj; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.replyTo = o.replyTo; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (o.data != null) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = (Bundle) o.data.clone(); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = null; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the targeted delivery time of this message, in milliseconds. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getWhen() { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return when; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTarget(Handler target) { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.target = target; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the a {@link android.os.Handler Handler} implementation that 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will receive this message. The object must implement 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.os.Handler#handleMessage(android.os.Message) 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handler.handleMessage()}. Each Handler has its own name-space for 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * message codes, so you do not need to 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * worry about yours conflicting with other handlers. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Handler getTarget() { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve callback object that will execute when this message is handled. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This object must implement Runnable. This is called by 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the <em>target</em> {@link Handler} that is receiving this Message to 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dispatch it. If 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not set, the message will be dispatched to the receiving Handler's 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Handler#handleMessage(Message Handler.handleMessage())}. */ 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Runnable getCallback() { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return callback; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Obtains a Bundle of arbitrary data associated with this 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * event, lazily creating it if necessary. Set this value by calling {@link #setData(Bundle)}. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle getData() { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (data == null) { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = new Bundle(); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Like getData(), but does not lazily create the Bundle. A null 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is returned if the Bundle does not already exist. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bundle peekData() { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Sets a Bundle of arbitrary data values. Use arg1 and arg1 members 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as a lower cost way to send a few simple integer values, if you can. */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setData(Bundle data) { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.data = data; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sends this Message to the Handler specified by {@link #getTarget}. 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Throws a null pointer exception if this field has not been set. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendToTarget() { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target.sendMessage(this); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void clearForRecycle() { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = 0; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = 0; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = 0; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obj = null; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = null; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = 0; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project target = null; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback = null; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = null; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Constructor (but the preferred way to get a Message is to call {@link #obtain() Message.obtain()}). 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message() { 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder b = new StringBuilder(); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append("{ what="); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(what); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" when="); 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(when); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg1 != 0) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg1="); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg1); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (arg2 != 0) { 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" arg2="); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(arg2); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" obj="); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(obj); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project b.append(" }"); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return b.toString(); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Message> CREATOR 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Parcelable.Creator<Message>() { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message createFromParcel(Parcel source) { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = Message.obtain(); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project msg.readFromParcel(source); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return msg; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message[] newArray(int size) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Message[size]; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null || callback != null) { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Can't marshal objects across processes."); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(what); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg1); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(arg2); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(when); 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeBundle(data); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Messenger.writeMessengerOrNullToParcel(replyTo, dest); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void readFromParcel(Parcel source) { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what = source.readInt(); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg1 = source.readInt(); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project arg2 = source.readInt(); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project when = source.readLong(); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project data = source.readBundle(); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project replyTo = Messenger.readMessengerOrNullFromParcel(source); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 406