19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 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.app;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ConfigurationInfo;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.IPackageDataObserver;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
254f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackbornimport android.os.Debug;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
302c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackbornimport android.os.SystemProperties;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interact with the overall activities running in the system.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ActivityManager {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static String TAG = "ActivityManager";
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static boolean DEBUG = false;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static boolean localLOGV = DEBUG || android.util.Config.LOGV;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Context mContext;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Handler mHandler;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*package*/ ActivityManager(Context context, Handler handler) {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHandler = handler;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
512c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * Return the approximate per-application memory class of the current
522c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device.  This gives you an idea of how hard a memory limit you should
532c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * impose on your application to let the overall system work best.  The
542c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * returned value is in megabytes; the baseline Android memory class is
552c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * 16 (which happens to be the Java heap limit of those devices); some
562c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device with more memory may return 24 or even higher numbers.
572c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     */
582c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    public int getMemoryClass() {
592c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return staticGetMemoryClass();
602c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
612c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn
622c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /** @hide */
632c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    static public int staticGetMemoryClass() {
642c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // Really brain dead right now -- just take this from the configured
652c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // vm heap size, and assume it is in megabytes and thus ends with "m".
662c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
672c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
682c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
692c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn
702c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /**
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about tasks that the user has most recently
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * started or visited.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RecentTaskInfo implements Parcelable {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task is currently running, this is the identifier for it.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If it is not running, this will be -1.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The original Intent used to launch the task.  You can use this
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Intent to re-launch the task (if it is no longer running) or bring
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the current task to the front.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Intent baseIntent;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task was started from an alias, this is the actual
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * activity component that was initially started; the component of
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the baseIntent in this case is the name of the actual activity
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * implementation that the alias referred to.  Otherwise, this is null.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName origActivity;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RecentTaskInfo() {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (baseIntent != null) {
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent.writeToParcel(dest, 0);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(origActivity, dest);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = Intent.CREATOR.createFromParcel(source);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = null;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            origActivity = ComponentName.readFromParcel(source);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RecentTaskInfo> CREATOR
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<RecentTaskInfo>() {
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo createFromParcel(Parcel source) {
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo(source);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo[] newArray(int size) {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo[size];
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RecentTaskInfo(Parcel source) {
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #getRecentTasks}: return all tasks, even those
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have set their
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag.
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int RECENT_WITH_EXCLUDED = 0x0001;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that the user has recently launched, with
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started and the maximum number the system can remember.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RecentTaskInfo records describing each of
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the recent tasks.
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RecentTaskInfo> getRecentTasks(int maxNum, int flags)
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRecentTasks(maxNum,
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    flags);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular task that is currently
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" in the system.  Note that a running task does not mean the
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * given task actual has a process it is actively running in; it simply
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * means that the user has gone to it and never closed it, but currently
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the system may have killed its process and is only holding on to its
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * last state in order to restart it when the user returns.
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningTaskInfo implements Parcelable {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A unique identifier for this task.
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The component launched as the first activity in the task.  This can
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered the "application" of this task.
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName baseActivity;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The activity component at the top of the history stack of the task.
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * This is what the user is currently doing.
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName topActivity;
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Thumbnail representation of the task's current state.
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Bitmap thumbnail;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Description of the task's current state.
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public CharSequence description;
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities in this task.
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numActivities;
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities that are currently running (not stopped
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * and persisted) in this task.
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numRunning;
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningTaskInfo() {
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(baseActivity, dest);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(topActivity, dest);
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (thumbnail != null) {
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail.writeToParcel(dest, 0);
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TextUtils.writeToParcel(description, dest,
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numActivities);
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numRunning);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            baseActivity = ComponentName.readFromParcel(source);
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            topActivity = ComponentName.readFromParcel(source);
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = Bitmap.CREATOR.createFromParcel(source);
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = null;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numActivities = source.readInt();
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numRunning = source.readInt();
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() {
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo createFromParcel(Parcel source) {
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo(source);
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo[] newArray(int size) {
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo[size];
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningTaskInfo(Parcel source) {
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that are currently running, with
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.  Note that
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" does not mean any of the task's code is currently loaded or
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * activity -- the task may have been frozen by the system, so that it
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can be restarted in its previous state when next brought to the
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground.
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started.
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningTaskInfo records describing each of
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningTaskInfo> getRunningTasks(int maxNum)
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return (List<RunningTaskInfo>)ActivityManagerNative.getDefault()
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .getTasks(maxNum, 0, null);
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular Service that is
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * currently running in the system.
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningServiceInfo implements Parcelable {
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The service component.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName service;
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this is the process the service is running in.
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3143025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The UID that owns this service.
3153025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3163025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int uid;
3173025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
3183025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process this service runs in.
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String process;
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the service has asked to run as a foreground process.
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean foreground;
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3293025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The time when the service was first made active, either by someone
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * starting or binding to it.
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long activeSince;
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if this service has been explicitly started.
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean started;
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of clients connected to the service.
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int clientCount;
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of times the service's process has crashed while the service
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * is running.
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int crashCount;
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The time when there was last activity in the service (either
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * explicit requests to start it or clients binding to it).
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long lastActivityTime;
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this service is not currently running, but scheduled to
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * restart at the given time.
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long restarting;
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3623025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3633025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if this service has been
3643025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * explicitly started.
3653025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3663025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_STARTED = 1<<0;
3673025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
3683025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3693025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if the service has asked to
3703025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * run as a foreground process.
3713025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3723025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_FOREGROUND = 1<<1;
3733025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
3743025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3753025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
3763025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * core system process.
3773025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3783025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_SYSTEM_PROCESS = 1<<2;
3793025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
3803025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3813025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
3823025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * persistent process.
3833025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3843025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_PERSISTENT_PROCESS = 1<<3;
3853025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
3863025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
3873025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Running flags.
3883025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
3893025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int flags;
3903025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
391dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
392dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
393dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the package that holds the binding.
394dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
395dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public String clientPackage;
396dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
397dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
398dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
399dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * a string resource providing a user-visible label for who the
400dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * client is.
401dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
402dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int clientLabel;
403dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningServiceInfo() {
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(service, dest);
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
4143025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(uid);
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(process);
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(foreground ? 1 : 0);
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(activeSince);
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(started ? 1 : 0);
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(clientCount);
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(crashCount);
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(lastActivityTime);
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(restarting);
4233025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(this.flags);
424dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeString(clientPackage);
425dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(clientLabel);
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            service = ComponentName.readFromParcel(source);
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
4313025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            uid = source.readInt();
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            process = source.readString();
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            foreground = source.readInt() != 0;
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            activeSince = source.readLong();
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            started = source.readInt() != 0;
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            clientCount = source.readInt();
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            crashCount = source.readInt();
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lastActivityTime = source.readLong();
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            restarting = source.readLong();
4403025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            flags = source.readInt();
441dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientPackage = source.readString();
442dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientLabel = source.readInt();
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() {
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo createFromParcel(Parcel source) {
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo(source);
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo[] newArray(int size) {
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo[size];
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningServiceInfo(Parcel source) {
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the services that are currently running.
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many services
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are running.
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningServiceInfo records describing each of
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningServiceInfo> getRunningServices(int maxNum)
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return (List<RunningServiceInfo>)ActivityManagerNative.getDefault()
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .getServices(maxNum, 0);
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
481dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * Returns a PendingIntent you can start to show a control panel for the
482dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * given running service.  If the service does not have a control panel,
483dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * null is returned.
484dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     */
485dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    public PendingIntent getRunningServiceControlPanel(ComponentName service)
486dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            throws SecurityException {
487dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        try {
488dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return ActivityManagerNative.getDefault()
489dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn                    .getRunningServiceControlPanel(service);
490dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        } catch (RemoteException e) {
491dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            // System dead, we will be dead too soon!
492dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return null;
493dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        }
494dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    }
495dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
496dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    /**
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about the available memory through
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ActivityManager#getMemoryInfo}.
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class MemoryInfo implements Parcelable {
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The total available memory on the system.  This number should not
5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered absolute: due to the nature of the kernel, a significant
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * portion of this memory is actually in use and needed for the overall
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * system to run well.
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long availMem;
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The threshold of {@link #availMem} at which we consider memory to be
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * low and start killing background services and other non-extraneous
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * processes.
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long threshold;
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the system considers itself to currently be in a low
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * memory situation.
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean lowMemory;
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MemoryInfo() {
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(availMem);
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(threshold);
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lowMemory ? 1 : 0);
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            availMem = source.readLong();
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            threshold = source.readLong();
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lowMemory = source.readInt() != 0;
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<MemoryInfo> CREATOR
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<MemoryInfo>() {
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo createFromParcel(Parcel source) {
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo(source);
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo[] newArray(int size) {
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo[size];
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private MemoryInfo(Parcel source) {
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getMemoryInfo(MemoryInfo outInfo) {
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ActivityManagerNative.getDefault().getMemoryInfo(outInfo);
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) {
5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().clearApplicationUserData(packageName,
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    observer);
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about any processes that are in an error condition.
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class ProcessErrorStateInfo implements Parcelable {
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Condition codes
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NO_ERROR = 0;
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CRASHED = 1;
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NOT_RESPONDING = 2;
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The condition that the process is in.
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int condition;
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The process name in which the crash or error occurred.
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The kernel user-ID that has been assigned to this process;
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * currently this is not a unique ID (multiple applications can have
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the same uid).
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int uid;
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The tag that was provided when the process crashed.
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String tag;
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A short message describing the error condition.
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String shortMsg;
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A long message describing the error condition.
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String longMsg;
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Raw data about the crash (typically a stack trace).
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public byte[] crashData;
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ProcessErrorStateInfo() {
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(condition);
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(uid);
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(tag);
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(shortMsg);
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(longMsg);
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(crashData == null ? -1 : crashData.length);
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeByteArray(crashData);
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            condition = source.readInt();
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uid = source.readInt();
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            tag = source.readString();
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            shortMsg = source.readString();
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            longMsg = source.readString();
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int cdLen = source.readInt();
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (cdLen == -1) {
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                crashData = null;
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                crashData = new byte[cdLen];
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                source.readByteArray(crashData);
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<ProcessErrorStateInfo> CREATOR =
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Creator<ProcessErrorStateInfo>() {
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo createFromParcel(Parcel source) {
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo(source);
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo[] newArray(int size) {
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo[size];
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private ProcessErrorStateInfo(Parcel source) {
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of any processes that are currently in an error condition.  The result
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be null if all processes are running properly at this time.
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of ProcessErrorStateInfo records, or null if there are no
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * current error conditions (it will not return an empty list).  This list ordering is not
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<ProcessErrorStateInfo> getProcessesInErrorState() {
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getProcessesInErrorState();
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a running process.
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningAppProcessInfo implements Parcelable {
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process that this object is associated with
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        /**
710eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         * The user id of this process.
711eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         */
712eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        public int uid;
713eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String pkgList[];
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running the
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * foreground UI.
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_FOREGROUND = 100;
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running something
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * that is considered to be actively visible to the user.
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_VISIBLE = 200;
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is contains services
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * that should remain running.
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_SERVICE = 300;
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process process contains
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * background code that is expendable.
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_BACKGROUND = 400;
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is empty of any
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * actively running code.
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_EMPTY = 500;
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The relative importance level that the system places on this
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * process.  May be one of {@link #IMPORTANCE_FOREGROUND},
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE},
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}.  These
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * constants are numbered so that "more important" values are always
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * smaller than "less important" values.
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int importance;
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * An additional ordering within a particular {@link #importance}
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * category, providing finer-grained information about the relative
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * utility of processes within a category.  This number means nothing
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * except that a smaller values are more recently used (and thus
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * more important).  Currently an LRU value is only maintained for
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the {@link #IMPORTANCE_BACKGROUND} category, though others may
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be maintained in the future.
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int lru;
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
767dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
768dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: nothing special has
769dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * been specified for the reason for this level.
770dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
771dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_UNKNOWN = 0;
772dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
773dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
774dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
775dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
776dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
777dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
778dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
779dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
780dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_PROVIDER_IN_USE = 1;
781dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
782dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
783dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
784dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
785dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
786dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
787dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
788dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
789dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_SERVICE_IN_USE = 2;
790dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
791dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
792dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * The reason for {@link #importance}, if any.
793dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
794dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonCode;
795dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
796dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
797dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
798dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the process ID of the other process that is a client of this
799dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * process.  This will be 0 if no other process is using this one.
800dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
801dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonPid;
802dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
803dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
804dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
805dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the name of the component that is being used in this process.
806dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
807dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public ComponentName importanceReasonComponent;
808dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo() {
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = IMPORTANCE_FOREGROUND;
811dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = REASON_UNKNOWN;
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) {
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = pProcessName;
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = pPid;
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = pArr;
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
827eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            dest.writeInt(uid);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeStringArray(pkgList);
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(importance);
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lru);
831dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonCode);
832dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonPid);
833dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            ComponentName.writeToParcel(importanceReasonComponent, dest);
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
839eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            uid = source.readInt();
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = source.readStringArray();
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = source.readInt();
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lru = source.readInt();
843dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = source.readInt();
844dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonPid = source.readInt();
845dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonComponent = ComponentName.readFromParcel(source);
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningAppProcessInfo> CREATOR =
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new Creator<RunningAppProcessInfo>() {
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo createFromParcel(Parcel source) {
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo(source);
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo[] newArray(int size) {
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo[size];
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningAppProcessInfo(Parcel source) {
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of application processes that are running on the device.
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningAppProcessInfo records, or null if there are no
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running processes (it will not return an empty list).  This list ordering is not
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningAppProcessInfo> getRunningAppProcesses() {
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRunningAppProcesses();
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
8794f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * Return information about the memory usage of one or more processes.
8804f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     *
8814f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @param pids The pids of the processes whose memory usage is to be
8824f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * retrieved.
8834f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @return Returns an array of memory information, one for each
8844f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * requested pid.
8854f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     */
8864f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) {
8874f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        try {
8884f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return ActivityManagerNative.getDefault().getProcessMemoryInfo(pids);
8894f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        } catch (RemoteException e) {
8904f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return null;
8914f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        }
8924f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    }
8934f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn
8944f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    /**
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Have the system perform a force stop of everything associated with
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given application package.  All processes that share its uid
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be killed, all services it has running stopped, all activities
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed, etc.  In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast will be sent, so that any of its registered alarms can
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be stopped, notifications removed, etc.
9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the permission
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.Manifest.permission#RESTART_PACKAGES} to be able to
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call this method.
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName The name of the package to be stopped.
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void restartPackage(String packageName) {
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ActivityManagerNative.getDefault().restartPackage(packageName);
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the device configuration attributes.
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConfigurationInfo getDeviceConfigurationInfo() {
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getDeviceConfigurationInfo();
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
927