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 1991268cf21eace600792d04db1ac62e9268f48002Dianne Hackbornimport android.os.BatteryStats; 20cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport android.os.IBinder; 214b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.app.IUsageStats; 228a0de58ece89c467c8e7415097d193e5f8db9db8Dianne Hackbornimport com.android.internal.app.ProcessStats; 234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.os.PkgUsageStats; 24cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport com.android.internal.os.TransferPipe; 258c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackbornimport com.android.internal.util.FastPrintWriter; 264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 30f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapuimport android.content.pm.ApplicationInfo; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ConfigurationInfo; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.IPackageDataObserver; 335320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.content.pm.PackageManager; 344120375d46091df8527bb701882e056fbb0e6b06Dianne Hackbornimport android.content.pm.UserInfo; 355ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.content.res.Resources; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 37967212cb542e6eeb308678367b53381bff984c31Craig Mautnerimport android.graphics.Rect; 388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Bundle; 394f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackbornimport android.os.Debug; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 435320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.os.Process; 444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.RemoteException; 458d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.os.ServiceManager; 462c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackbornimport android.os.SystemProperties; 47f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 495ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.util.DisplayMetrics; 508d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.util.Log; 51b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.util.Slog; 525ef44b7566566db08b62245cbb9002b548071603Kenny Root 53cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.FileDescriptor; 54cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.FileOutputStream; 55cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.PrintWriter; 568d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.HashMap; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 588d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.Map; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interact with the overall activities running in the system. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ActivityManager { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static String TAG = "ActivityManager"; 6543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato private static boolean localLOGV = false; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Context mContext; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Handler mHandler; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 70a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 71cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code 72cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * <meta-data>}</a> name for a 'home' Activity that declares a package that is to be 73bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate * uninstalled in lieu of the declaring one. The package named here must be 74cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * signed with the same certificate as the one declaring the {@code <meta-data>}. 75bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate */ 76bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate public static final String META_HOME_ALTERNATE = "android.app.home.alternate"; 77bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate 78bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate /** 79a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 80a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * start had to be canceled. 81a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 82a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 83a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_CANCELED = -6; 84a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 85a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 86a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 87a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * thing being started is not an activity. 88a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 89a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 90a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_NOT_ACTIVITY = -5; 91a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 92a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 93a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 94a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * caller does not have permission to start the activity. 95a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 96a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 97a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_PERMISSION_DENIED = -4; 98a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 99a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 100a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 101a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * caller has requested both to forward a result and to receive 102a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a result. 103a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 104a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 105a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3; 106a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 107a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 108a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 109a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * requested class is not found. 110a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 111a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 112a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_CLASS_NOT_FOUND = -2; 113a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 114a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 115a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManager.startActivity: an error where the 116a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * given Intent could not be resolved to an activity. 117a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 118a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 119a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_INTENT_NOT_RESOLVED = -1; 120a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 121a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 122a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: the activity was started 123a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * successfully as normal. 124a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 125a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 126a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_SUCCESS = 0; 127a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 128a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 129a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: the caller asked that the Intent not 130a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * be executed if it is the recipient, and that is indeed the case. 131a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 132a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 133a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_RETURN_INTENT_TO_CALLER = 1; 134a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 135a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 136a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: activity wasn't really started, but 137a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a task was simply brought to the foreground. 138a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 139a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 140a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_TASK_TO_FRONT = 2; 141a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 142a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 143a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: activity wasn't really started, but 144a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * the given Intent was given to the existing top activity. 145a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 146a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 147a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_DELIVERED_TO_TOP = 3; 148a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 149a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 150a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.startActivity: request was canceled because 151a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * app switches are temporarily canceled to ensure the user's last request 152a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * (such as pressing home) is performed. 153a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 154a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 155a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_SWITCHES_CANCELED = 4; 156a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 157a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 158a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: do special start mode where 159a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a new activity is launched only if it is needed. 160a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 161a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 162a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0; 163a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 164a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 165a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: launch the app for 166a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * debugging. 167a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 168a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 169a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_DEBUG = 1<<1; 170a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 171a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 172a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: launch the app for 173a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * OpenGL tracing. 174a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 175a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 176a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_OPENGL_TRACES = 1<<2; 177a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 178a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 179a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Flag for IActivityManaqer.startActivity: if the app is being 180a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * launched for profiling, automatically stop the profiler once done. 181a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 182a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 183a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int START_FLAG_AUTO_STOP_PROFILER = 1<<3; 184a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 185a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 186a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.broadcastIntent: success! 187a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 188a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 189a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int BROADCAST_SUCCESS = 0; 190a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 191a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 192a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Result for IActivityManaqer.broadcastIntent: attempt to broadcast 193a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * a sticky intent without appropriate permission. 194a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 195a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 196a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1; 197a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 198a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 199a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 200a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a sendBroadcast operation. 201a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 202a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 203a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_BROADCAST = 1; 204a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 205a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 206a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 207a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a startActivity operation. 208a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 209a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 210a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_ACTIVITY = 2; 211a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 212a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 213a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 214a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for an activity result operation. 215a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 216a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 217a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_ACTIVITY_RESULT = 3; 218a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 219a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 220a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Type for IActivityManaqer.getIntentSender: this PendingIntent is 221a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for a startService operation. 222a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @hide 223a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 224a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public static final int INTENT_SENDER_SERVICE = 4; 225a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 22680a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: success! */ 22780a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_SUCCESS = 0; 22880a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 22980a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: given user id is not known. */ 23080a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_UNKNOWN_USER = -1; 23180a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 23280a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn /** @hide User operation call: given user id is the current user, can't be stopped. */ 23380a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn public static final int USER_OP_IS_CURRENT = -2; 23480a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn 235a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is a persistent system process. */ 236a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public static final int PROCESS_STATE_PERSISTENT = 0; 237a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 238a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is a persistent system process and is doing UI. */ 239a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public static final int PROCESS_STATE_PERSISTENT_UI = 1; 240a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 241c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is hosting the current top activities. Note that this covers 242c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * all activities that are visible to the user. */ 243a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public static final int PROCESS_STATE_TOP = 2; 244a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 245a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is important to the user, and something they are aware of. */ 246c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_IMPORTANT_FOREGROUND = 3; 247a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 248a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is important to the user, but not something they are aware of. */ 249a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public static final int PROCESS_STATE_IMPORTANT_BACKGROUND = 4; 250a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 251a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is in the background running a backup/restore operation. */ 252c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_BACKUP = 5; 253c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn 254c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is in the background, but it can't restore its state so we want 255c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * to try to avoid killing it. */ 256c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_HEAVY_WEIGHT = 6; 257a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 258c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is in the background running a service. Unlike oom_adj, this level 259c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * is used for both the normal running in background state and the executing 260c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * operations state. */ 261a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public static final int PROCESS_STATE_SERVICE = 7; 262a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 263c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is in the background running a receiver. Note that from the 264c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * perspective of oom_adj receivers run at a higher foreground level, but for our 265c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * prioritization here that is not necessary and putting them below services means 266c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * many fewer changes in some process states as they receive broadcasts. */ 267c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_RECEIVER = 8; 268c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn 269a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is in the background but hosts the home activity. */ 270c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_HOME = 9; 271a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 272a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn /** @hide Process is in the background but hosts the last shown activity. */ 273c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_LAST_ACTIVITY = 10; 274c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn 275c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is being cached for later use and contains activities. */ 276c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_CACHED_ACTIVITY = 11; 277c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn 278c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is being cached for later use and is a client of another cached 279c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn * process that contains activities. */ 280c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 12; 281a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 282c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn /** @hide Process is being cached for later use and is empty. */ 283c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn public static final int PROCESS_STATE_CACHED_EMPTY = 13; 284a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityManager(Context context, Handler handler) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler = handler; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2910f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application most always run in 2920f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 2930f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 2940f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 2950f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_ALWAYS = -1; 2960f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 2970f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 2980f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application can never run in 2990f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 3000f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 3010f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 3020f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_NEVER = -2; 3030f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3040f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3050f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: unknown. 3060f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 3070f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 3080f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_UNKNOWN = -3; 3090f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3100f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3110f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application currently has compatibility 3120f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * mode disabled. 3130f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 3140f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 3150f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_DISABLED = 0; 3160f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3170f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3180f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: the application currently has compatibility 3190f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * mode enabled. 3200f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 3210f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 3220f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_ENABLED = 1; 3230f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3240f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3250f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * Screen compatibility mode: request to toggle the application's 3260f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * compatibility mode. 3270f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn * @hide 3280f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn */ 3290f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public static final int COMPAT_MODE_TOGGLE = 2; 3300f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3310f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** @hide */ 3320f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public int getFrontActivityScreenCompatMode() { 3330f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 3340f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return ActivityManagerNative.getDefault().getFrontActivityScreenCompatMode(); 3350f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 3360f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3370f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return 0; 3380f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3390f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3400f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 341df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 3420f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public void setFrontActivityScreenCompatMode(int mode) { 3430f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 3440f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn ActivityManagerNative.getDefault().setFrontActivityScreenCompatMode(mode); 3450f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 3460f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3470f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3480f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3490f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 350df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 3510f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public int getPackageScreenCompatMode(String packageName) { 3520f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 3530f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return ActivityManagerNative.getDefault().getPackageScreenCompatMode(packageName); 3540f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 3550f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3560f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn return 0; 3570f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3580f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3590f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 360df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn /** @hide */ 3610f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn public void setPackageScreenCompatMode(String packageName, int mode) { 3620f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn try { 3630f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn ActivityManagerNative.getDefault().setPackageScreenCompatMode(packageName, mode); 3640f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } catch (RemoteException e) { 3650f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3660f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3670f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3680f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 36936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn /** @hide */ 37036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn public boolean getPackageAskScreenCompat(String packageName) { 37136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn try { 37236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName); 37336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } catch (RemoteException e) { 37436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn // System dead, we will be dead too soon! 37536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn return false; 37636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } 37736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } 37836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn 37936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn /** @hide */ 38036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn public void setPackageAskScreenCompat(String packageName, boolean ask) { 38136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn try { 38236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask); 38336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn } catch (RemoteException e) { 3840f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn // System dead, we will be dead too soon! 3850f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3860f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn } 3870f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn 3880f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn /** 3892c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * Return the approximate per-application memory class of the current 3902c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * device. This gives you an idea of how hard a memory limit you should 3912c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * impose on your application to let the overall system work best. The 3922c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * returned value is in megabytes; the baseline Android memory class is 3932c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * 16 (which happens to be the Java heap limit of those devices); some 3942c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn * device with more memory may return 24 or even higher numbers. 3952c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn */ 3962c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn public int getMemoryClass() { 3972c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn return staticGetMemoryClass(); 3982c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn } 3992c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn 4002c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn /** @hide */ 4012c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn static public int staticGetMemoryClass() { 4022c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn // Really brain dead right now -- just take this from the configured 4032c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn // vm heap size, and assume it is in megabytes and thus ends with "m". 4047ad33c8f9e7ecd356979dbad23c6c171b4f3339dDianne Hackborn String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", ""); 405de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn if (vmHeapSize != null && !"".equals(vmHeapSize)) { 406de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1)); 407de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn } 408de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn return staticGetLargeMemoryClass(); 4094e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn } 4104e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn 4114e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn /** 4124e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * Return the approximate per-application memory class of the current 4134e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * device when an application is running with a large heap. This is the 4144e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * space available for memory-intensive applications; most applications 4154e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * should not need this amount of memory, and should instead stay with the 4164e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * {@link #getMemoryClass()} limit. The returned value is in megabytes. 4174e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * This may be the same size as {@link #getMemoryClass()} on memory 4184e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * constrained devices, or it may be significantly larger on devices with 4194e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn * a large amount of available RAM. 4203b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * 4213b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * <p>The is the size of the application's Dalvik heap if it has 4223b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn * specified <code>android:largeHeap="true"</code> in its manifest. 4234e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn */ 4244e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn public int getLargeMemoryClass() { 4254e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn return staticGetLargeMemoryClass(); 4264e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn } 4274e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn 4284e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn /** @hide */ 4294e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn static public int staticGetLargeMemoryClass() { 4304e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn // Really brain dead right now -- just take this from the configured 4314e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn // vm heap size, and assume it is in megabytes and thus ends with "m". 4322c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m"); 4332c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1)); 4342c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn } 435b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn 4362c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn /** 437b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * Returns true if this is a low-RAM device. Exactly whether a device is low-RAM 438b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * is ultimately up to the device configuration, but currently it generally means 439b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * something in the class of a 512MB device with about a 800x480 or less screen. 440b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * This is mostly intended to be used by apps to determine whether they should turn 441b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * off certain features that require more RAM. 442b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn */ 443b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn public boolean isLowRamDevice() { 444b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn return isLowRamDeviceStatic(); 445b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn } 44698365d7663cbd82979a5700faf0050220b01084dJeff Brown 447b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn /** @hide */ 448b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn public static boolean isLowRamDeviceStatic() { 4492f61f91491785ef78d92d08ed3e09b0695564fadChristopher Tate return "true".equals(SystemProperties.get("ro.config.low_ram", "false")); 450b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn } 451b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn 452b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn /** 453b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * Used by persistent processes to determine if they are running on a 454b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * higher-end device so should be okay using hardware drawing acceleration 455b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn * (which tends to consume a lot more RAM). 45649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn * @hide 45749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn */ 458b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn static public boolean isHighEndGfx() { 459b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn return !isLowRamDeviceStatic() && 460b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn !Resources.getSystem().getBoolean(com.android.internal.R.bool.config_avoidGfxAccel); 46149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn } 46249d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn 46349d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn /** 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about tasks that the user has most recently 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * started or visited. 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RecentTaskInfo implements Parcelable { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this task is currently running, this is the identifier for it. 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If it is not running, this will be -1. 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int id; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 475d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * The true identifier of this task, valid even if it is not running. 476d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn */ 477d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn public int persistentId; 478d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn 479d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The original Intent used to launch the task. You can use this 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Intent to re-launch the task (if it is no longer running) or bring 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the current task to the front. 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent baseIntent; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this task was started from an alias, this is the actual 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity component that was initially started; the component of 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the baseIntent in this case is the name of the actual activity 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation that the alias referred to. Otherwise, this is null. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName origActivity; 493d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 494d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 495d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Description of the task's last state. 496d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn */ 497d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn public CharSequence description; 4986d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner 4996d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner /** 5006d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner * The id of the ActivityStack this Task was on most recently. 5012703052413387a0ba9d66f04b6e0421d5f59674eCraig Mautner * @hide 5026d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner */ 5036d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner public int stackId; 5046d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo() { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5086d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner @Override 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5136d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner @Override 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(id); 516d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn dest.writeInt(persistentId); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (baseIntent != null) { 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent.writeToParcel(dest, 0); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(origActivity, dest); 524d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn TextUtils.writeToParcel(description, dest, 525d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 5266d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner dest.writeInt(stackId); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project id = source.readInt(); 531d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn persistentId = source.readInt(); 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent = Intent.CREATOR.createFromParcel(source); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseIntent = null; 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project origActivity = ComponentName.readFromParcel(source); 538d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 5396d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner stackId = source.readInt(); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5416d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RecentTaskInfo> CREATOR 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<RecentTaskInfo>() { 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo createFromParcel(Parcel source) { 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RecentTaskInfo(source); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RecentTaskInfo[] newArray(int size) { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RecentTaskInfo[size]; 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RecentTaskInfo(Parcel source) { 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Flag for use with {@link #getRecentTasks}: return all tasks, even those 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that have set their 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag. 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RECENT_WITH_EXCLUDED = 0x0001; 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 565d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * Provides a list that does not contain any 56653d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn * recent tasks that currently are not available to the user. 56753d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn */ 56853d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002; 569d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 570d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn /** 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the tasks that the user has recently launched, with 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the most recent being first and older ones after in order. 573c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 574c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging and presenting 575c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * task management user interfaces</b>. This should never be used for 576c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * core logic in an application, such as deciding between different 577c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * behaviors based on the information found here. Such uses are 578c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <em>not</em> supported, and will likely break in the future. For 579c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * example, if multiple applications can be actively running at the 580c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * same time, assumptions made about the meaning of the data here for 581c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * purposes of control flow will be incorrect.</p> 582c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many tasks the 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user has started and the maximum number the system can remember. 586d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn * @param flags Information about what to return. May be any combination 587805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RecentTaskInfo records describing each of 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the recent tasks. 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if the caller does 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RecentTaskInfo> getRecentTasks(int maxNum, int flags) 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getRecentTasks(maxNum, 599f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn flags, UserHandle.myUserId()); 6008264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } catch (RemoteException e) { 6018264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani // System dead, we will be dead too soon! 6028264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani return null; 6038264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } 6048264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani } 6058264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani 6068264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani /** 6078264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a 6088264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * specific user. It requires holding 6098264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. 6108264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @param maxNum The maximum number of entries to return in the list. The 6118264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * actual number returned may be smaller, depending on how many tasks the 6128264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * user has started and the maximum number the system can remember. 6138264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @param flags Information about what to return. May be any combination 6148264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. 6158264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * 6168264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @return Returns a list of RecentTaskInfo records describing each of 6178264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * the recent tasks. 6188264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * 6198264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @throws SecurityException Throws SecurityException if the caller does 6208264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * not hold the {@link android.Manifest.permission#GET_TASKS} or the 6218264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions. 6228264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani * @hide 6238264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani */ 6248264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId) 6258264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani throws SecurityException { 6268264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani try { 6278264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani return ActivityManagerNative.getDefault().getRecentTasks(maxNum, 6288264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani flags, userId); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular task that is currently 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "running" in the system. Note that a running task does not mean the 6380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * given task actually has a process it is actively running in; it simply 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means that the user has gone to it and never closed it, but currently 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system may have killed its process and is only holding on to its 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * last state in order to restart it when the user returns. 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningTaskInfo implements Parcelable { 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A unique identifier for this task. 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int id; 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The component launched as the first activity in the task. This can 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be considered the "application" of this task. 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName baseActivity; 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The activity component at the top of the history stack of the task. 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is what the user is currently doing. 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName topActivity; 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 662805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * Thumbnail representation of the task's current state. Currently 663805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn * always null. 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Bitmap thumbnail; 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Description of the task's current state. 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence description; 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of activities in this task. 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int numActivities; 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of activities that are currently running (not stopped 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and persisted) in this task. 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int numRunning; 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 683c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner /** 684c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner * Last time task was run. For sorting. 685c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner * @hide 686c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner */ 687c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner public long lastActiveTime; 688c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo() { 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(id); 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(baseActivity, dest); 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(topActivity, dest); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (thumbnail != null) { 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(1); 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail.writeToParcel(dest, 0); 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(0); 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextUtils.writeToParcel(description, dest, 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(numActivities); 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(numRunning); 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project id = source.readInt(); 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project baseActivity = ComponentName.readFromParcel(source); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project topActivity = ComponentName.readFromParcel(source); 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (source.readInt() != 0) { 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail = Bitmap.CREATOR.createFromParcel(source); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thumbnail = null; 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numActivities = source.readInt(); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numRunning = source.readInt(); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() { 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo createFromParcel(Parcel source) { 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningTaskInfo(source); 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningTaskInfo[] newArray(int size) { 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningTaskInfo[size]; 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningTaskInfo(Parcel source) { 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 739d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the tasks that are currently running, with 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the most recent being first and older ones after in order. Note that 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "running" does not mean any of the task's code is currently loaded or 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity -- the task may have been frozen by the system, so that it 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be restarted in its previous state when next brought to the 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground. 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many tasks the 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user has started. 7510b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7520b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param flags Optional flags 7530b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param receiver Optional receiver for delayed thumbnails 7540b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningTaskInfo records describing each of 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the running tasks. 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7580b2a6d0773211449fbde9d2706388714beeffebbJim Miller * Some thumbnails may not be available at the time of this call. The optional 7590b2a6d0773211449fbde9d2706388714beeffebbJim Miller * receiver may be used to receive those thumbnails. 7600b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if the caller does 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 7630b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7640b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @hide 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7660b2a6d0773211449fbde9d2706388714beeffebbJim Miller public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver) 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7690b2a6d0773211449fbde9d2706388714beeffebbJim Miller return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver); 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7750b2a6d0773211449fbde9d2706388714beeffebbJim Miller 7760b2a6d0773211449fbde9d2706388714beeffebbJim Miller /** 7770b2a6d0773211449fbde9d2706388714beeffebbJim Miller * Return a list of the tasks that are currently running, with 7780b2a6d0773211449fbde9d2706388714beeffebbJim Miller * the most recent being first and older ones after in order. Note that 7790b2a6d0773211449fbde9d2706388714beeffebbJim Miller * "running" does not mean any of the task's code is currently loaded or 7800b2a6d0773211449fbde9d2706388714beeffebbJim Miller * activity -- the task may have been frozen by the system, so that it 7810b2a6d0773211449fbde9d2706388714beeffebbJim Miller * can be restarted in its previous state when next brought to the 7820b2a6d0773211449fbde9d2706388714beeffebbJim Miller * foreground. 7830b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 784c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging and presenting 785c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * task management user interfaces</b>. This should never be used for 786c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * core logic in an application, such as deciding between different 787c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * behaviors based on the information found here. Such uses are 788c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <em>not</em> supported, and will likely break in the future. For 789c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * example, if multiple applications can be actively running at the 790c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * same time, assumptions made about the meaning of the data here for 791c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * purposes of control flow will be incorrect.</p> 792c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 7930b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @param maxNum The maximum number of entries to return in the list. The 7940b2a6d0773211449fbde9d2706388714beeffebbJim Miller * actual number returned may be smaller, depending on how many tasks the 7950b2a6d0773211449fbde9d2706388714beeffebbJim Miller * user has started. 7960b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 7970b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @return Returns a list of RunningTaskInfo records describing each of 7980b2a6d0773211449fbde9d2706388714beeffebbJim Miller * the running tasks. 7990b2a6d0773211449fbde9d2706388714beeffebbJim Miller * 8000b2a6d0773211449fbde9d2706388714beeffebbJim Miller * @throws SecurityException Throws SecurityException if the caller does 8010b2a6d0773211449fbde9d2706388714beeffebbJim Miller * not hold the {@link android.Manifest.permission#GET_TASKS} permission. 8020b2a6d0773211449fbde9d2706388714beeffebbJim Miller */ 8030b2a6d0773211449fbde9d2706388714beeffebbJim Miller public List<RunningTaskInfo> getRunningTasks(int maxNum) 8040b2a6d0773211449fbde9d2706388714beeffebbJim Miller throws SecurityException { 8050b2a6d0773211449fbde9d2706388714beeffebbJim Miller return getRunningTasks(maxNum, 0, null); 8060b2a6d0773211449fbde9d2706388714beeffebbJim Miller } 8070b2a6d0773211449fbde9d2706388714beeffebbJim Miller 8080c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 8090c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * Remove some end of a task's activity stack that is not part of 8100c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * the main application. The selected activities will be finished, so 8110c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * they are no longer part of the main task. 8120c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 8130c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param taskId The identifier of the task. 8140c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param subTaskIndex The number of the sub-task; this corresponds 8150c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * to the index of the thumbnail returned by {@link #getTaskThumbnails(int)}. 8160c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @return Returns true if the sub-task was found and was removed. 8170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 8180c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 8190c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 8200c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean removeSubTask(int taskId, int subTaskIndex) 8210c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn throws SecurityException { 8220c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 8230c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return ActivityManagerNative.getDefault().removeSubTask(taskId, subTaskIndex); 8240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (RemoteException e) { 8250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn // System dead, we will be dead too soon! 8260c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 8270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 8280c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 8290c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 8300c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 8310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * If set, the process of the root activity of the task will be killed 8320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * as part of removing the task. 8330c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 8340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 8350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public static final int REMOVE_TASK_KILL_PROCESS = 0x0001; 8360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 8370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn /** 8380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * Completely remove the given task. 8390c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 8400c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param taskId Identifier of the task to be removed. 8410c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @param flags Additional operational flags. May be 0 or 8420c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * {@link #REMOVE_TASK_KILL_PROCESS}. 8430c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @return Returns true if the given task was found and removed. 8440c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * 8450c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn * @hide 8460c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn */ 8470c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn public boolean removeTask(int taskId, int flags) 8480c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn throws SecurityException { 8490c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn try { 8500c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return ActivityManagerNative.getDefault().removeTask(taskId, flags); 8510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } catch (RemoteException e) { 8520c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn // System dead, we will be dead too soon! 8530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn return false; 8540c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 8550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn } 8560c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn 857d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** @hide */ 858f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public static class TaskThumbnails implements Parcelable { 859f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public Bitmap mainThumbnail; 860f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 861f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public int numSubThumbbails; 862f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 863f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn /** @hide */ 864f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public IThumbnailRetriever retriever; 865f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 866f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails() { 867f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 868f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 869f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public Bitmap getSubThumbnail(int index) { 870f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn try { 871f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return retriever.getThumbnail(index); 872f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } catch (RemoteException e) { 873f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return null; 874f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 875f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 876f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 877f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public int describeContents() { 878f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return 0; 879f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 880f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 881f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 882f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (mainThumbnail != null) { 883f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(1); 884f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail.writeToParcel(dest, 0); 885f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } else { 886f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(0); 887f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 888f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeInt(numSubThumbbails); 889f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn dest.writeStrongInterface(retriever); 890f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 891f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 892f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public void readFromParcel(Parcel source) { 893f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn if (source.readInt() != 0) { 894f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail = Bitmap.CREATOR.createFromParcel(source); 895f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } else { 896f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn mainThumbnail = null; 897f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 898f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn numSubThumbbails = source.readInt(); 899f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn retriever = IThumbnailRetriever.Stub.asInterface(source.readStrongBinder()); 900f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 901f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 902f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public static final Creator<TaskThumbnails> CREATOR = new Creator<TaskThumbnails>() { 903f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails createFromParcel(Parcel source) { 904f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return new TaskThumbnails(source); 905f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 906f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails[] newArray(int size) { 907f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return new TaskThumbnails[size]; 908f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 909f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn }; 910f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 911f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn private TaskThumbnails(Parcel source) { 912f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn readFromParcel(source); 913f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 914f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn } 915f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn 916f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn /** @hide */ 917f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn public TaskThumbnails getTaskThumbnails(int id) throws SecurityException { 918d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn try { 919f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn return ActivityManagerNative.getDefault().getTaskThumbnails(id); 920d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } catch (RemoteException e) { 921d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn // System dead, we will be dead too soon! 922d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn return null; 923d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } 924d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn } 92515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn 92615491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn /** @hide */ 92715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn public Bitmap getTaskTopThumbnail(int id) throws SecurityException { 92815491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn try { 92915491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn return ActivityManagerNative.getDefault().getTaskTopThumbnail(id); 93015491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } catch (RemoteException e) { 93115491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn // System dead, we will be dead too soon! 93215491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn return null; 93315491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } 93415491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn } 93515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 937621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Flag for {@link #moveTaskToFront(int, int)}: also move the "home" 938621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * activity along with the task, so it is positioned immediately behind 939621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the task. 940621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 941621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn public static final int MOVE_TASK_WITH_HOME = 0x00000001; 942621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 943621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 944d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * Flag for {@link #moveTaskToFront(int, int)}: don't count this as a 945d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * user-instigated action, so the current activity will not receive a 946d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn * hint that the user is leaving. 947d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn */ 948d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn public static final int MOVE_TASK_NO_USER_ACTION = 0x00000002; 949d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn 950d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn /** 9518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Equivalent to calling {@link #moveTaskToFront(int, int, Bundle)} 9528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * with a null options argument. 9538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * 9548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param taskId The identifier of the task to be moved, as found in 9558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * {@link RunningTaskInfo} or {@link RecentTaskInfo}. 9568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param flags Additional operational flags, 0 or more of 957ecbfe253fb6fb83aa533828cce6e9c11ff7115daCraig Mautner * {@link #MOVE_TASK_WITH_HOME}, {@link #MOVE_TASK_NO_USER_ACTION}. 9588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn */ 9598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public void moveTaskToFront(int taskId, int flags) { 9608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn moveTaskToFront(taskId, flags, null); 9618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn } 9628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn 9638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn /** 964621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Ask that the task associated with a given task ID be moved to the 965621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * front of the stack, so it is now visible to the user. Requires that 966621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the caller hold permission {@link android.Manifest.permission#REORDER_TASKS} 967621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * or a SecurityException will be thrown. 968621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 969621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param taskId The identifier of the task to be moved, as found in 970621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * {@link RunningTaskInfo} or {@link RecentTaskInfo}. 971621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param flags Additional operational flags, 0 or more of 972ecbfe253fb6fb83aa533828cce6e9c11ff7115daCraig Mautner * {@link #MOVE_TASK_WITH_HOME}, {@link #MOVE_TASK_NO_USER_ACTION}. 9738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * @param options Additional options for the operation, either null or 9748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * as per {@link Context#startActivity(Intent, android.os.Bundle) 9758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn * Context.startActivity(Intent, Bundle)}. 976621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 9778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn public void moveTaskToFront(int taskId, int flags, Bundle options) { 978621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn try { 9798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn ActivityManagerNative.getDefault().moveTaskToFront(taskId, flags, options); 980621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } catch (RemoteException e) { 981621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn // System dead, we will be dead too soon! 982621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 983621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 984621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 985621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a particular Service that is 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently running in the system. 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningServiceInfo implements Parcelable { 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The service component. 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName service; 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If non-zero, this is the process the service is running in. 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10013025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * The UID that owns this service. 10023025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public int uid; 10043025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10053025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the process this service runs in. 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String process; 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if the service has asked to run as a foreground process. 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean foreground; 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10163025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * The time when the service was first made active, either by someone 10179adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * starting or binding to it. This 10189adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * is in units of {@link android.os.SystemClock#elapsedRealtime()}. 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long activeSince; 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if this service has been explicitly started. 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean started; 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of clients connected to the service. 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int clientCount; 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Number of times the service's process has crashed while the service 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is running. 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int crashCount; 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time when there was last activity in the service (either 10409adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * explicit requests to start it or clients binding to it). This 10419adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn * is in units of {@link android.os.SystemClock#uptimeMillis()}. 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long lastActivityTime; 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If non-zero, this service is not currently running, but scheduled to 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * restart at the given time. 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long restarting; 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10513025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10523025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags}: set if this service has been 10533025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * explicitly started. 10543025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10553025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_STARTED = 1<<0; 10563025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10573025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10583025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags}: set if the service has asked to 10593025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * run as a foreground process. 10603025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10613025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_FOREGROUND = 1<<1; 10623025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10633025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10643025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags): set if the service is running in a 10653025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * core system process. 10663025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10673025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_SYSTEM_PROCESS = 1<<2; 10683025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10693025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10703025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Bit for {@link #flags): set if the service is running in a 10713025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * persistent process. 10723025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10733025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public static final int FLAG_PERSISTENT_PROCESS = 1<<3; 10743025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 10753025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn /** 10763025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn * Running flags. 10773025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn */ 10783025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn public int flags; 10793025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn 1080dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1081dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For special services that are bound to by system code, this is 1082dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the package that holds the binding. 1083dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1084dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public String clientPackage; 1085dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1086dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1087dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For special services that are bound to by system code, this is 1088dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * a string resource providing a user-visible label for who the 1089dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * client is. 1090dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1091dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int clientLabel; 1092dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo() { 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName.writeToParcel(service, dest); 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 11033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn dest.writeInt(uid); 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(process); 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(foreground ? 1 : 0); 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(activeSince); 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(started ? 1 : 0); 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(clientCount); 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(crashCount); 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(lastActivityTime); 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(restarting); 11123025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn dest.writeInt(this.flags); 1113dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeString(clientPackage); 1114dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(clientLabel); 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project service = ComponentName.readFromParcel(source); 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 11203025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn uid = source.readInt(); 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project process = source.readString(); 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project foreground = source.readInt() != 0; 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project activeSince = source.readLong(); 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project started = source.readInt() != 0; 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clientCount = source.readInt(); 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project crashCount = source.readInt(); 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lastActivityTime = source.readLong(); 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restarting = source.readLong(); 11293025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn flags = source.readInt(); 1130dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn clientPackage = source.readString(); 1131dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn clientLabel = source.readInt(); 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() { 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo createFromParcel(Parcel source) { 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningServiceInfo(source); 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningServiceInfo[] newArray(int size) { 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningServiceInfo[size]; 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningServiceInfo(Parcel source) { 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a list of the services that are currently running. 1150c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1151c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or implementing 1152c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * service management type user interfaces.</b></p> 1153c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param maxNum The maximum number of entries to return in the list. The 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actual number returned may be smaller, depending on how many services 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are running. 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningServiceInfo records describing each of 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the running tasks. 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RunningServiceInfo> getRunningServices(int maxNum) 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws SecurityException { 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 11644b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return ActivityManagerNative.getDefault() 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getServices(maxNum, 0); 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // System dead, we will be dead too soon! 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1173dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Returns a PendingIntent you can start to show a control panel for the 1174dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * given running service. If the service does not have a control panel, 1175dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * null is returned. 1176dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1177dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public PendingIntent getRunningServiceControlPanel(ComponentName service) 1178dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn throws SecurityException { 1179dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn try { 1180dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn return ActivityManagerNative.getDefault() 1181dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn .getRunningServiceControlPanel(service); 1182dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } catch (RemoteException e) { 1183dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn // System dead, we will be dead too soon! 1184dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn return null; 1185dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } 1186dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn } 1187dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1188dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about the available memory through 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityManager#getMemoryInfo}. 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class MemoryInfo implements Parcelable { 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 119459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * The available memory on the system. This number should not 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be considered absolute: due to the nature of the kernel, a significant 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * portion of this memory is actually in use and needed for the overall 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system to run well. 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long availMem; 120059325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 120159325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn /** 120259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * The total memory accessible by the kernel. This is basically the 120359325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * RAM size of the device, not including below-kernel fixed allocations 120459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn * like DMA buffers, RAM for the baseband CPU, etc. 120559325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn */ 120659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn public long totalMem; 120759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The threshold of {@link #availMem} at which we consider memory to be 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * low and start killing background services and other non-extraneous 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes. 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long threshold; 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set to true if the system considers itself to currently be in a low 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * memory situation. 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean lowMemory; 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12217d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 12227d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long hiddenAppThreshold; 12237d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 12247d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long secondaryServerThreshold; 12257d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 12267d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long visibleAppThreshold; 12277d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn /** @hide */ 12287d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn public long foregroundAppThreshold; 12297d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo() { 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(availMem); 123959325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn dest.writeLong(totalMem); 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeLong(threshold); 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(lowMemory ? 1 : 0); 12427d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(hiddenAppThreshold); 12437d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(secondaryServerThreshold); 12447d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(visibleAppThreshold); 12457d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn dest.writeLong(foregroundAppThreshold); 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project availMem = source.readLong(); 125059325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn totalMem = source.readLong(); 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project threshold = source.readLong(); 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lowMemory = source.readInt() != 0; 12537d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn hiddenAppThreshold = source.readLong(); 12547d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn secondaryServerThreshold = source.readLong(); 12557d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn visibleAppThreshold = source.readLong(); 12567d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn foregroundAppThreshold = source.readLong(); 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<MemoryInfo> CREATOR 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Creator<MemoryInfo>() { 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo createFromParcel(Parcel source) { 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MemoryInfo(source); 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MemoryInfo[] newArray(int size) { 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MemoryInfo[size]; 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MemoryInfo(Parcel source) { 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1274c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn /** 1275c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * Return general information about the memory state of the system. This 1276c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * can be used to help decide how to manage your own memory, though note 1277c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * that polling is not recommended and 1278c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * {@link android.content.ComponentCallbacks2#onTrimMemory(int) 1279c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * ComponentCallbacks2.onTrimMemory(int)} is the preferred way to do this. 1280c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * Also see {@link #getMyMemoryState} for how to retrieve the current trim 1281c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * level of your process as needed, which gives a better hint for how to 1282c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * manage its memory. 1283c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn */ 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getMemoryInfo(MemoryInfo outInfo) { 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().getMemoryInfo(outInfo); 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1290967212cb542e6eeb308678367b53381bff984c31Craig Mautner 12915ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner /** 12925ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner * Information you can retrieve about the WindowManager StackBox hierarchy. 12935ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner * @hide 12945ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner */ 12955ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public static class StackBoxInfo implements Parcelable { 12965ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public int stackBoxId; 12975ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public float weight; 12985ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public boolean vertical; 12995ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public Rect bounds; 13005ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackBoxInfo[] children; 13015ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public int stackId; 13025ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackInfo stack; 13035ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13045ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 13055ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public int describeContents() { 13065ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return 0; 13075ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13085ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13095ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 13105ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public void writeToParcel(Parcel dest, int flags) { 13115ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner dest.writeInt(stackBoxId); 13125ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner dest.writeFloat(weight); 13135ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner dest.writeInt(vertical ? 1 : 0); 13145ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner bounds.writeToParcel(dest, flags); 13155ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner dest.writeInt(stackId); 13165ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner if (children != null) { 13175ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner children[0].writeToParcel(dest, flags); 13185ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner children[1].writeToParcel(dest, flags); 13195ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } else { 13205ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner stack.writeToParcel(dest, flags); 13215ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13225ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13235ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13245ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public void readFromParcel(Parcel source) { 13255ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner stackBoxId = source.readInt(); 13265ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner weight = source.readFloat(); 13275ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner vertical = source.readInt() == 1; 13285ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner bounds = Rect.CREATOR.createFromParcel(source); 13295ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner stackId = source.readInt(); 13305ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner if (stackId == -1) { 13315ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner children = new StackBoxInfo[2]; 13325ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner children[0] = StackBoxInfo.CREATOR.createFromParcel(source); 13335ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner children[1] = StackBoxInfo.CREATOR.createFromParcel(source); 13345ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } else { 13355ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner stack = StackInfo.CREATOR.createFromParcel(source); 13365ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13375ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13385ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13395ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public static final Creator<StackBoxInfo> CREATOR = 13405ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner new Creator<ActivityManager.StackBoxInfo>() { 13415ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13425ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 13435ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackBoxInfo createFromParcel(Parcel source) { 13445ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return new StackBoxInfo(source); 13455ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13465ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13475ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 13485ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackBoxInfo[] newArray(int size) { 13495ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return new StackBoxInfo[size]; 13505ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13515ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner }; 13525ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13535ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackBoxInfo() { 13545ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13555ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13565ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackBoxInfo(Parcel source) { 13575ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner readFromParcel(source); 13585ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13595ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13605ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public String toString(String prefix) { 13615ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner StringBuilder sb = new StringBuilder(256); 13625ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(prefix); sb.append("Box id=" + stackBoxId); sb.append(" weight=" + weight); 13635ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(" vertical=" + vertical); sb.append(" bounds=" + bounds.toShortString()); 13645ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append("\n"); 13655ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner if (children != null) { 13665ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(prefix); sb.append("First child=\n"); 13675ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(children[0].toString(prefix + " ")); 13685ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(prefix); sb.append("Second child=\n"); 13695ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(children[1].toString(prefix + " ")); 13705ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } else { 13715ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(prefix); sb.append("Stack=\n"); 13725ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(stack.toString(prefix + " ")); 13735ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13745ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return sb.toString(); 13755ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13765ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 13775ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 13785ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public String toString() { 13795ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return toString(""); 13805ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 13815ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 1382967212cb542e6eeb308678367b53381bff984c31Craig Mautner 1383967212cb542e6eeb308678367b53381bff984c31Craig Mautner /** 1384967212cb542e6eeb308678367b53381bff984c31Craig Mautner * Information you can retrieve about an ActivityStack in the system. 1385967212cb542e6eeb308678367b53381bff984c31Craig Mautner * @hide 1386967212cb542e6eeb308678367b53381bff984c31Craig Mautner */ 1387967212cb542e6eeb308678367b53381bff984c31Craig Mautner public static class StackInfo implements Parcelable { 1388967212cb542e6eeb308678367b53381bff984c31Craig Mautner public int stackId; 1389967212cb542e6eeb308678367b53381bff984c31Craig Mautner public Rect bounds; 1390967212cb542e6eeb308678367b53381bff984c31Craig Mautner public int[] taskIds; 1391967212cb542e6eeb308678367b53381bff984c31Craig Mautner public String[] taskNames; 1392967212cb542e6eeb308678367b53381bff984c31Craig Mautner 1393967212cb542e6eeb308678367b53381bff984c31Craig Mautner @Override 1394967212cb542e6eeb308678367b53381bff984c31Craig Mautner public int describeContents() { 1395967212cb542e6eeb308678367b53381bff984c31Craig Mautner return 0; 1396967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1397967212cb542e6eeb308678367b53381bff984c31Craig Mautner 1398967212cb542e6eeb308678367b53381bff984c31Craig Mautner @Override 1399967212cb542e6eeb308678367b53381bff984c31Craig Mautner public void writeToParcel(Parcel dest, int flags) { 1400967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeInt(stackId); 1401967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeInt(bounds.left); 1402967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeInt(bounds.top); 1403967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeInt(bounds.right); 1404967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeInt(bounds.bottom); 1405967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeIntArray(taskIds); 1406967212cb542e6eeb308678367b53381bff984c31Craig Mautner dest.writeStringArray(taskNames); 1407967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1408967212cb542e6eeb308678367b53381bff984c31Craig Mautner 1409967212cb542e6eeb308678367b53381bff984c31Craig Mautner public void readFromParcel(Parcel source) { 1410967212cb542e6eeb308678367b53381bff984c31Craig Mautner stackId = source.readInt(); 1411967212cb542e6eeb308678367b53381bff984c31Craig Mautner bounds = new Rect( 1412967212cb542e6eeb308678367b53381bff984c31Craig Mautner source.readInt(), source.readInt(), source.readInt(), source.readInt()); 1413967212cb542e6eeb308678367b53381bff984c31Craig Mautner taskIds = source.createIntArray(); 1414967212cb542e6eeb308678367b53381bff984c31Craig Mautner taskNames = source.createStringArray(); 1415967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1416967212cb542e6eeb308678367b53381bff984c31Craig Mautner 1417967212cb542e6eeb308678367b53381bff984c31Craig Mautner public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() { 1418967212cb542e6eeb308678367b53381bff984c31Craig Mautner @Override 1419967212cb542e6eeb308678367b53381bff984c31Craig Mautner public StackInfo createFromParcel(Parcel source) { 1420967212cb542e6eeb308678367b53381bff984c31Craig Mautner return new StackInfo(source); 1421967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1422967212cb542e6eeb308678367b53381bff984c31Craig Mautner @Override 1423967212cb542e6eeb308678367b53381bff984c31Craig Mautner public StackInfo[] newArray(int size) { 1424967212cb542e6eeb308678367b53381bff984c31Craig Mautner return new StackInfo[size]; 1425967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1426967212cb542e6eeb308678367b53381bff984c31Craig Mautner }; 1427967212cb542e6eeb308678367b53381bff984c31Craig Mautner 14285ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public StackInfo() { 14295ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 14305ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 1431967212cb542e6eeb308678367b53381bff984c31Craig Mautner private StackInfo(Parcel source) { 1432967212cb542e6eeb308678367b53381bff984c31Craig Mautner readFromParcel(source); 1433967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1434967212cb542e6eeb308678367b53381bff984c31Craig Mautner 14355ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public String toString(String prefix) { 1436967212cb542e6eeb308678367b53381bff984c31Craig Mautner StringBuilder sb = new StringBuilder(256); 14375ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner sb.append(prefix); sb.append("Stack id="); sb.append(stackId); 1438967212cb542e6eeb308678367b53381bff984c31Craig Mautner sb.append(" bounds="); sb.append(bounds.toShortString()); sb.append("\n"); 14395ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner prefix = prefix + " "; 1440967212cb542e6eeb308678367b53381bff984c31Craig Mautner for (int i = 0; i < taskIds.length; ++i) { 1441967212cb542e6eeb308678367b53381bff984c31Craig Mautner sb.append(prefix); sb.append("taskId="); sb.append(taskIds[i]); 1442967212cb542e6eeb308678367b53381bff984c31Craig Mautner sb.append(": "); sb.append(taskNames[i]); sb.append("\n"); 1443967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1444967212cb542e6eeb308678367b53381bff984c31Craig Mautner return sb.toString(); 1445967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 14465ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 14475ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 14485ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner public String toString() { 14495ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner return toString(""); 14505ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner } 1451967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 1452967212cb542e6eeb308678367b53381bff984c31Craig Mautner 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) { 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().clearApplicationUserData(packageName, 14594120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn observer, UserHandle.myUserId()); 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1464a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate 1465a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate /** 1466a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate * Permits an application to erase its own data from disk. This is equivalent to 1467ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * the user choosing to clear the app's data from within the device settings UI. It 1468ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * erases all dynamic data associated with the app -- its private data and data in its 1469ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * private area on external storage -- but does not remove the installed application 1470ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * itself, nor any OBB files. 1471a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate * 1472a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate * @return {@code true} if the application successfully requested that the application's 1473a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate * data be erased; {@code false} otherwise. 1474a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate */ 1475a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate public boolean clearApplicationUserData() { 1476a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate return clearApplicationUserData(mContext.getPackageName(), null); 1477a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate } 1478a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about any processes that are in an error condition. 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class ProcessErrorStateInfo implements Parcelable { 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Condition codes 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NO_ERROR = 0; 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CRASHED = 1; 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NOT_RESPONDING = 2; 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The condition that the process is in. 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int condition; 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The process name in which the crash or error occurred. 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String processName; 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pid of this process; 0 if none 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The kernel user-ID that has been assigned to this process; 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * currently this is not a unique ID (multiple applications can have 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the same uid). 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int uid; 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 151360d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor * The activity name associated with the error, if known. May be null. 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String tag; 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A short message describing the error condition. 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String shortMsg; 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A long message describing the error condition. 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String longMsg; 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1528b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor * The stack trace where the error originated. May be null. 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1530b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor public String stackTrace; 1531b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor 1532b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor /** 1533b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor * to be deprecated: This value will always be null. 1534b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor */ 1535b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor public byte[] crashData = null; 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo() { 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15405ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15455ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner @Override 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(condition); 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(processName); 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(uid); 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(tag); 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(shortMsg); 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(longMsg); 1554b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor dest.writeString(stackTrace); 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15565ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project condition = source.readInt(); 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = source.readString(); 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uid = source.readInt(); 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tag = source.readString(); 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project shortMsg = source.readString(); 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project longMsg = source.readString(); 1565b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor stackTrace = source.readString(); 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ProcessErrorStateInfo> CREATOR = 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<ProcessErrorStateInfo>() { 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo createFromParcel(Parcel source) { 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ProcessErrorStateInfo(source); 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ProcessErrorStateInfo[] newArray(int size) { 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ProcessErrorStateInfo[size]; 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ProcessErrorStateInfo(Parcel source) { 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a list of any processes that are currently in an error condition. The result 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be null if all processes are running properly at this time. 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of ProcessErrorStateInfo records, or null if there are no 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current error conditions (it will not return an empty list). This list ordering is not 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified. 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<ProcessErrorStateInfo> getProcessesInErrorState() { 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getProcessesInErrorState(); 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Information you can retrieve about a running process. 16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class RunningAppProcessInfo implements Parcelable { 16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the process that this object is associated with 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String processName; 16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The pid of this process; 0 if none 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int pid; 16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1613eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 1614eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * The user id of this process. 1615eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 1616eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public int uid; 1617eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 1618baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1619baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn * All packages that have been loaded into the process. 1620baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String pkgList[]; 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1624482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * Constant for {@link #flags}: this is an app that is unable to 1625482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * correctly save its state when going to the background, 1626482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * so it can not be killed while in the background. 1627482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * @hide 1628baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 1629482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn public static final int FLAG_CANT_SAVE_STATE = 1<<0; 1630baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn 1631baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1632424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * Constant for {@link #flags}: this process is associated with a 1633424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * persistent system app. 1634424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn * @hide 1635424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn */ 1636424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn public static final int FLAG_PERSISTENT = 1<<1; 1637424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn 1638424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn /** 16390c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * Constant for {@link #flags}: this process is associated with a 16400c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * persistent system app. 16410c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn * @hide 16420c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn */ 16430c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn public static final int FLAG_HAS_ACTIVITIES = 1<<2; 16440c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn 16450c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn /** 1646baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn * Flags of information. May be any of 1647482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * {@link #FLAG_CANT_SAVE_STATE}. 1648482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn * @hide 1649baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn */ 1650baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn public int flags; 165127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 165227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn /** 165327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * Last memory trim level reported to the process: corresponds to 165427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * the values supplied to {@link android.content.ComponentCallbacks2#onTrimMemory(int) 165527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * ComponentCallbacks2.onTrimMemory(int)}. 165627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn */ 165727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn public int lastTrimLevel; 165827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 1659baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn /** 1660a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * Constant for {@link #importance}: this is a persistent process. 1661a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * Only used when reporting to process observers. 1662a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn * @hide 1663a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn */ 1664a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn public static final int IMPORTANCE_PERSISTENT = 50; 1665a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn 1666a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn /** 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is running the 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * foreground UI. 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_FOREGROUND = 100; 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 167332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * Constant for {@link #importance}: this process is running something 167432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * that is actively visible to the user, though not in the immediate 167532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * foreground. 1676860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn */ 167732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int IMPORTANCE_VISIBLE = 200; 1678860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn 1679860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn /** 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is running something 168132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * that is considered to be actively perceptible to the user. An 168232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * example would be an application performing background music playback. 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 168432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int IMPORTANCE_PERCEPTIBLE = 130; 168532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 168632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn /** 16875383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * Constant for {@link #importance}: this process is running an 16885383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * application that can not save its state, and thus can't be killed 16895383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * while in the background. 16905383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn * @hide 169132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn */ 16925383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn public static final int IMPORTANCE_CANT_SAVE_STATE = 170; 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is contains services 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should remain running. 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_SERVICE = 300; 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process process contains 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * background code that is expendable. 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_BACKGROUND = 400; 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constant for {@link #importance}: this process is empty of any 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actively running code. 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IMPORTANCE_EMPTY = 500; 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The relative importance level that the system places on this 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process. May be one of {@link #IMPORTANCE_FOREGROUND}, 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE}, 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}. These 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constants are numbered so that "more important" values are always 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * smaller than "less important" values. 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int importance; 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An additional ordering within a particular {@link #importance} 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * category, providing finer-grained information about the relative 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * utility of processes within a category. This number means nothing 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * except that a smaller values are more recently used (and thus 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more important). Currently an LRU value is only maintained for 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link #IMPORTANCE_BACKGROUND} category, though others may 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be maintained in the future. 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int lru; 173227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 1733dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1734dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: nothing special has 1735dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * been specified for the reason for this level. 1736dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1737dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_UNKNOWN = 0; 1738dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1739dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1740dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: one of the application's 1741dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * content providers is being used by another process. The pid of 1742dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the client process is in {@link #importanceReasonPid} and the 1743dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * target provider in this process is in 1744dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * {@link #importanceReasonComponent}. 1745dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1746dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_PROVIDER_IN_USE = 1; 1747dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1748dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1749dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * Constant for {@link #importanceReasonCode}: one of the application's 1750dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * content providers is being used by another process. The pid of 1751dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * the client process is in {@link #importanceReasonPid} and the 1752dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * target provider in this process is in 1753dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * {@link #importanceReasonComponent}. 1754dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1755dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public static final int REASON_SERVICE_IN_USE = 2; 1756dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1757dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1758dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * The reason for {@link #importance}, if any. 1759dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1760dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int importanceReasonCode; 1761dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1762dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1763dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For the specified values of {@link #importanceReasonCode}, this 1764dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * is the process ID of the other process that is a client of this 1765dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * process. This will be 0 if no other process is using this one. 1766dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1767dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public int importanceReasonPid; 1768dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1769dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn /** 1770dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * For the specified values of {@link #importanceReasonCode}, this 1771dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn * is the name of the component that is being used in this process. 1772dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn */ 1773dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn public ComponentName importanceReasonComponent; 1774dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn 1775905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn /** 1776cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * When {@link #importanceReasonPid} is non-0, this is the importance 1777905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn * of the other pid. @hide 1778905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn */ 1779905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn public int importanceReasonImportance; 1780905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo() { 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project importance = IMPORTANCE_FOREGROUND; 1783dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonCode = REASON_UNKNOWN; 17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) { 17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = pProcessName; 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = pPid; 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pkgList = pArr; 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(processName); 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(pid); 1799eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeInt(uid); 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeStringArray(pkgList); 1801baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn dest.writeInt(this.flags); 180227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn dest.writeInt(lastTrimLevel); 18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(importance); 18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(lru); 1805dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(importanceReasonCode); 1806dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn dest.writeInt(importanceReasonPid); 1807dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn ComponentName.writeToParcel(importanceReasonComponent, dest); 1808905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn dest.writeInt(importanceReasonImportance); 18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel source) { 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = source.readString(); 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pid = source.readInt(); 1814eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn uid = source.readInt(); 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pkgList = source.readStringArray(); 1816baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn flags = source.readInt(); 181727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn lastTrimLevel = source.readInt(); 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project importance = source.readInt(); 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lru = source.readInt(); 1820dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonCode = source.readInt(); 1821dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonPid = source.readInt(); 1822dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn importanceReasonComponent = ComponentName.readFromParcel(source); 1823905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn importanceReasonImportance = source.readInt(); 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<RunningAppProcessInfo> CREATOR = 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<RunningAppProcessInfo>() { 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo createFromParcel(Parcel source) { 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningAppProcessInfo(source); 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RunningAppProcessInfo[] newArray(int size) { 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new RunningAppProcessInfo[size]; 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RunningAppProcessInfo(Parcel source) { 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project readFromParcel(source); 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1842f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * Returns a list of application processes installed on external media 1843f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * that are running on the device. 1844f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * 1845c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1846c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1847c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1848f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * @return Returns a list of ApplicationInfo records, or null if none 1849f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * This list ordering is not specified. 1850f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu * @hide 1851f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu */ 1852f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu public List<ApplicationInfo> getRunningExternalApplications() { 1853f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu try { 1854f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu return ActivityManagerNative.getDefault().getRunningExternalApplications(); 1855f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } catch (RemoteException e) { 1856f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu return null; 1857f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } 1858f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu } 1859f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu 1860f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu /** 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a list of application processes that are running on the device. 1862c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1863c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1864c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1865c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a list of RunningAppProcessInfo records, or null if there are no 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running processes (it will not return an empty list). This list ordering is not 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified. 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<RunningAppProcessInfo> getRunningAppProcesses() { 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getRunningAppProcesses(); 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 187727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 187827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn /** 187927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * Return global memory state information for the calling process. This 188027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * does not fill in all fields of the {@link RunningAppProcessInfo}. The 188127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * only fields that will be filled in are 188227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#pid}, 188327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#uid}, 188427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#lastTrimLevel}, 188527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#importance}, 188627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#lru}, and 188727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn * {@link RunningAppProcessInfo#importanceReasonCode}. 188827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn */ 188927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn static public void getMyMemoryState(RunningAppProcessInfo outState) { 189027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn try { 189127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn ActivityManagerNative.getDefault().getMyMemoryState(outState); 189227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } catch (RemoteException e) { 189327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } 189427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn } 189527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn 18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18974f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * Return information about the memory usage of one or more processes. 1898c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 1899c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * <p><b>Note: this method is only intended for debugging or building 1900c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * a user-facing process management UI.</b></p> 1901c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn * 19024f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * @param pids The pids of the processes whose memory usage is to be 19034f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * retrieved. 19044f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * @return Returns an array of memory information, one for each 19054f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn * requested pid. 19064f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn */ 19074f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) { 19084f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn try { 19094f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn return ActivityManagerNative.getDefault().getProcessMemoryInfo(pids); 19104f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } catch (RemoteException e) { 19114f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn return null; 19124f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } 19134f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn } 19144f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn 19154f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn /** 191603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @deprecated This is now just a wrapper for 191703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link #killBackgroundProcesses(String)}; the previous behavior here 191803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * is no longer available to applications because it allows them to 191903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * break other applications by removing their alarms, stopping their 192003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * services, etc. 192103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn */ 192203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn @Deprecated 192303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void restartPackage(String packageName) { 192403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn killBackgroundProcesses(packageName); 192503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 192603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn 192703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn /** 192803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * Have the system immediately kill all background processes associated 192903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * with the given package. This is the same as the kernel killing those 193003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * processes to reclaim memory; the system will take care of restarting 193103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * these processes in the future as needed. 193203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 193303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * <p>You must hold the permission 193403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} to be able to 193503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * call this method. 193603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 193703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @param packageName The name of the package whose processes are to 193803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * be killed. 193903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn */ 194003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void killBackgroundProcesses(String packageName) { 194103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn try { 19421676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn ActivityManagerNative.getDefault().killBackgroundProcesses(packageName, 19431676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn UserHandle.myUserId()); 194403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } catch (RemoteException e) { 194503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 194603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn } 194703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn 194803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn /** 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Have the system perform a force stop of everything associated with 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the given application package. All processes that share its uid 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be killed, all services it has running stopped, all activities 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * removed, etc. In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED} 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * broadcast will be sent, so that any of its registered alarms can 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be stopped, notifications removed, etc. 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You must hold the permission 195703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to 19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call this method. 19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param packageName The name of the package to be stopped. 196103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * 196203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * @hide This is not available to third party applications due to 196303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * it allowing them to break other applications by stopping their 196403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn * services, removing their alarms, etc. 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 196603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn public void forceStopPackage(String packageName) { 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 19681676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn ActivityManagerNative.getDefault().forceStopPackage(packageName, 19691676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn UserHandle.myUserId()); 19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the device configuration attributes. 19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ConfigurationInfo getDeviceConfigurationInfo() { 19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getDeviceConfigurationInfo(); 19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19845ef44b7566566db08b62245cbb9002b548071603Kenny Root 19855ef44b7566566db08b62245cbb9002b548071603Kenny Root /** 19865ef44b7566566db08b62245cbb9002b548071603Kenny Root * Get the preferred density of icons for the launcher. This is used when 19875ef44b7566566db08b62245cbb9002b548071603Kenny Root * custom drawables are created (e.g., for shortcuts). 19885ef44b7566566db08b62245cbb9002b548071603Kenny Root * 19895ef44b7566566db08b62245cbb9002b548071603Kenny Root * @return density in terms of DPI 19905ef44b7566566db08b62245cbb9002b548071603Kenny Root */ 19915ef44b7566566db08b62245cbb9002b548071603Kenny Root public int getLauncherLargeIconDensity() { 19925ef44b7566566db08b62245cbb9002b548071603Kenny Root final Resources res = mContext.getResources(); 19935ef44b7566566db08b62245cbb9002b548071603Kenny Root final int density = res.getDisplayMetrics().densityDpi; 1994d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn final int sw = res.getConfiguration().smallestScreenWidthDp; 19955ef44b7566566db08b62245cbb9002b548071603Kenny Root 1996d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn if (sw < 600) { 1997d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // Smaller than approx 7" tablets, use the regular icon size. 19985ef44b7566566db08b62245cbb9002b548071603Kenny Root return density; 19995ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20005ef44b7566566db08b62245cbb9002b548071603Kenny Root 20015ef44b7566566db08b62245cbb9002b548071603Kenny Root switch (density) { 20025ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_LOW: 20035ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_MEDIUM; 20045ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_MEDIUM: 20055ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_HIGH; 2006d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn case DisplayMetrics.DENSITY_TV: 2007d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return DisplayMetrics.DENSITY_XHIGH; 20085ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_HIGH: 20095ef44b7566566db08b62245cbb9002b548071603Kenny Root return DisplayMetrics.DENSITY_XHIGH; 20105ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_XHIGH: 2011d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return DisplayMetrics.DENSITY_XXHIGH; 2012d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn case DisplayMetrics.DENSITY_XXHIGH: 2013d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return DisplayMetrics.DENSITY_XHIGH * 2; 20145ef44b7566566db08b62245cbb9002b548071603Kenny Root default: 2015d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // The density is some abnormal value. Return some other 2016d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // abnormal value that is a reasonable scaling of it. 2017d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (int)((density*1.5f)+.5f); 20185ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20195ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20205ef44b7566566db08b62245cbb9002b548071603Kenny Root 20215ef44b7566566db08b62245cbb9002b548071603Kenny Root /** 20225ef44b7566566db08b62245cbb9002b548071603Kenny Root * Get the preferred launcher icon size. This is used when custom drawables 20235ef44b7566566db08b62245cbb9002b548071603Kenny Root * are created (e.g., for shortcuts). 20245ef44b7566566db08b62245cbb9002b548071603Kenny Root * 20255ef44b7566566db08b62245cbb9002b548071603Kenny Root * @return dimensions of square icons in terms of pixels 20265ef44b7566566db08b62245cbb9002b548071603Kenny Root */ 20275ef44b7566566db08b62245cbb9002b548071603Kenny Root public int getLauncherLargeIconSize() { 20285ef44b7566566db08b62245cbb9002b548071603Kenny Root final Resources res = mContext.getResources(); 20295ef44b7566566db08b62245cbb9002b548071603Kenny Root final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size); 2030d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn final int sw = res.getConfiguration().smallestScreenWidthDp; 20315ef44b7566566db08b62245cbb9002b548071603Kenny Root 2032d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn if (sw < 600) { 2033d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // Smaller than approx 7" tablets, use the regular icon size. 20345ef44b7566566db08b62245cbb9002b548071603Kenny Root return size; 20355ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20365ef44b7566566db08b62245cbb9002b548071603Kenny Root 20375ef44b7566566db08b62245cbb9002b548071603Kenny Root final int density = res.getDisplayMetrics().densityDpi; 20385ef44b7566566db08b62245cbb9002b548071603Kenny Root 20395ef44b7566566db08b62245cbb9002b548071603Kenny Root switch (density) { 20405ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_LOW: 20415ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW; 20425ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_MEDIUM: 20435ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM; 2044d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn case DisplayMetrics.DENSITY_TV: 2045d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH; 20465ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_HIGH: 20475ef44b7566566db08b62245cbb9002b548071603Kenny Root return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH; 20485ef44b7566566db08b62245cbb9002b548071603Kenny Root case DisplayMetrics.DENSITY_XHIGH: 2049d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH; 2050d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn case DisplayMetrics.DENSITY_XXHIGH: 2051d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH; 20525ef44b7566566db08b62245cbb9002b548071603Kenny Root default: 2053d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // The density is some abnormal value. Return some other 2054d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn // abnormal value that is a reasonable scaling of it. 2055d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn return (int)((size*1.5f) + .5f); 20565ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20575ef44b7566566db08b62245cbb9002b548071603Kenny Root } 20585ef44b7566566db08b62245cbb9002b548071603Kenny Root 20599327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn /** 20609327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * Returns "true" if the user interface is currently being messed with 20619327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn * by a monkey. 20629327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn */ 20639327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn public static boolean isUserAMonkey() { 20649327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn try { 20659327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn return ActivityManagerNative.getDefault().isUserAMonkey(); 20669327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } catch (RemoteException e) { 20679327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 20689327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn return false; 20699327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn } 20703b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot 20713b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot /** 20723b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot * Returns "true" if device is running in a test harness. 20733b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot */ 20743b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot public static boolean isRunningInTestHarness() { 20753b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot return SystemProperties.getBoolean("ro.test_harness", false); 20763b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot } 20778d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 20788d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay /** 20798d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * Returns the launch count of each installed package. 20808d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * 20818d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay * @hide 20828d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay */ 20838d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay public Map<String, Integer> getAllPackageLaunchCounts() { 20848d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay try { 20858d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay IUsageStats usageStatsService = IUsageStats.Stub.asInterface( 20868d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay ServiceManager.getService("usagestats")); 20878d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay if (usageStatsService == null) { 20888d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return new HashMap<String, Integer>(); 20898d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 20908d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 2091bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay PkgUsageStats[] allPkgUsageStats = usageStatsService.getAllPkgUsageStats(); 2092bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay if (allPkgUsageStats == null) { 2093bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay return new HashMap<String, Integer>(); 2094bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay } 2095bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay 20968d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay Map<String, Integer> launchCounts = new HashMap<String, Integer>(); 2097bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay for (PkgUsageStats pkgUsageStats : allPkgUsageStats) { 20988d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay launchCounts.put(pkgUsageStats.packageName, pkgUsageStats.launchCount); 20998d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 21008d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay 21018d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return launchCounts; 21028d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } catch (RemoteException e) { 21038d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay Log.w(TAG, "Could not query launch counts", e); 21048d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay return new HashMap<String, Integer>(); 21058d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 21068d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay } 21074b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani 21085320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn /** @hide */ 21095320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn public static int checkComponentPermission(String permission, int uid, 21105320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn int owningUid, boolean exported) { 21115320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Root, system server get to do everything. 21125320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (uid == 0 || uid == Process.SYSTEM_UID) { 21135320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 21145320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21155320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Isolated processes don't get any permissions. 2116f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn if (UserHandle.isIsolated(uid)) { 21175320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 21185320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21195320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // If there is a uid that owns whatever is being accessed, it has 21205320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // blanket access to it regardless of the permissions it requires. 2121f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn if (owningUid >= 0 && UserHandle.isSameApp(uid, owningUid)) { 21225320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 21235320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21245320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // If the target is not exported, then nobody else can get to it. 21255320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (!exported) { 2126be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn /* 2127be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn RuntimeException here = new RuntimeException("here"); 2128be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn here.fillInStackTrace(); 2129be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid, 2130be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn here); 2131be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn */ 21325320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 21335320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21345320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn if (permission == null) { 21355320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_GRANTED; 21365320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21375320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn try { 21385320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return AppGlobals.getPackageManager() 21395320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn .checkUidPermission(permission, uid); 21405320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } catch (RemoteException e) { 21415320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn // Should never happen, but if it does... deny! 21427d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn Slog.e(TAG, "PackageManager is dead?!?", e); 21437d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 21447d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return PackageManager.PERMISSION_DENIED; 21457d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 21467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 21477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn /** @hide */ 21487d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn public static int checkUidPermission(String permission, int uid) { 21497d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn try { 21507d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn return AppGlobals.getPackageManager() 21517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn .checkUidPermission(permission, uid); 21527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } catch (RemoteException e) { 21537d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn // Should never happen, but if it does... deny! 21545320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn Slog.e(TAG, "PackageManager is dead?!?", e); 21555320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21565320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn return PackageManager.PERMISSION_DENIED; 21575320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn } 21585320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn 2159d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn /** 2160d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @hide 2161d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * Helper for dealing with incoming user arguments to system service calls. 2162d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * Takes care of checking permissions and converting USER_CURRENT to the 2163d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * actual current user. 2164d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * 2165d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param callingPid The pid of the incoming call, as per Binder.getCallingPid(). 2166d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param callingUid The uid of the incoming call, as per Binder.getCallingUid(). 2167d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param userId The user id argument supplied by the caller -- this is the user 2168d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * they want to run as. 2169d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param allowAll If true, we will allow USER_ALL. This means you must be prepared 2170d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * to get a USER_ALL returned and deal with it correctly. If false, 2171d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * an exception will be thrown if USER_ALL is supplied. 2172d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param requireFull If true, the caller must hold 2173d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} to be able to run as a 2174d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * different user than their current process; otherwise they must hold 2175d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * {@link android.Manifest.permission#INTERACT_ACROSS_USERS}. 2176d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param name Optional textual name of the incoming call; only for generating error messages. 2177d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @param callerPackage Optional package name of caller; only for error messages. 2178d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * 2179d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * @return Returns the user ID that the call should run as. Will always be a concrete 2180d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * user number, unless <var>allowAll</var> is true in which case it could also be 2181d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn * USER_ALL. 2182d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn */ 21834120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn public static int handleIncomingUser(int callingPid, int callingUid, int userId, 21844120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn boolean allowAll, boolean requireFull, String name, String callerPackage) { 21854120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn if (UserHandle.getUserId(callingUid) == userId) { 21864120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return userId; 21874120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 21884120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn try { 21894120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return ActivityManagerNative.getDefault().handleIncomingUser(callingPid, 21904120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn callingUid, userId, allowAll, requireFull, name, callerPackage); 21914120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } catch (RemoteException e) { 21924120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn throw new SecurityException("Failed calling activity manager", e); 21934120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 21944120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 21954120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn 21964120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn /** @hide */ 21974120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn public static int getCurrentUser() { 21984120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn UserInfo ui; 21994120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn try { 22004120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn ui = ActivityManagerNative.getDefault().getCurrentUser(); 22014120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return ui != null ? ui.id : 0; 22024120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } catch (RemoteException e) { 22034120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn return 0; 22044120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 22054120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn } 22064120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn 22074b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani /** 22089fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * Returns the usage statistics of each installed package. 22099fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * 22109fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy * @hide 22119fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy */ 22129fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy public PkgUsageStats[] getAllPackageUsageStats() { 22139fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy try { 22149fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy IUsageStats usageStatsService = IUsageStats.Stub.asInterface( 22159fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy ServiceManager.getService("usagestats")); 22169fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy if (usageStatsService != null) { 22179fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy return usageStatsService.getAllPkgUsageStats(); 22189fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 22199fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } catch (RemoteException e) { 22209fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy Log.w(TAG, "Could not query usage stats", e); 22219fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 22229fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy return new PkgUsageStats[0]; 22239fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy } 22249fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy 22259fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy /** 22264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @param userid the user's id. Zero indicates the default user 22274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani * @hide 22284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani */ 22294b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani public boolean switchUser(int userid) { 22304b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani try { 22314b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return ActivityManagerNative.getDefault().switchUser(userid); 22324b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } catch (RemoteException e) { 22334b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani return false; 22344b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 22354b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani } 22365e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn 22375e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn /** 22385e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * Return whether the given user is actively running. This means that 22395e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * the user is in the "started" state, not "stopped" -- it is currently 22405e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * allowed to run code through scheduled alarms, receiving broadcasts, 22415e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * etc. A started user may be either the current foreground user or a 22425e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * background user; the result here does not distinguish between the two. 22435e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * @param userid the user's id. Zero indicates the default user. 22445e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn * @hide 22455e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn */ 22465e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn public boolean isUserRunning(int userid) { 22475e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn try { 2248a8a9bd65bf5865d83ef44f54552ca39522bfbcf0Dianne Hackborn return ActivityManagerNative.getDefault().isUserRunning(userid, false); 22495e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } catch (RemoteException e) { 22505e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn return false; 22515e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } 22525e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn } 2253cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn 2254cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn /** 2255cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * Perform a system dump of various state associated with the given application 2256cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * package name. This call blocks while the dump is being performed, so should 2257cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * not be done on a UI thread. The data will be written to the given file 2258cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * descriptor as text. An application must hold the 2259cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * {@link android.Manifest.permission#DUMP} permission to make this call. 2260ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * @param fd The file descriptor that the dump should be written to. The file 2261ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * descriptor is <em>not</em> closed by this function; the caller continues to 2262ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn * own it. 2263cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * @param packageName The name of the package that is to be dumped. 2264cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn */ 2265cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn public void dumpPackageState(FileDescriptor fd, String packageName) { 2266cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn dumpPackageStateStatic(fd, packageName); 2267cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 2268cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn 2269cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn /** 2270cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn * @hide 2271cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn */ 2272cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn public static void dumpPackageStateStatic(FileDescriptor fd, String packageName) { 2273cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn FileOutputStream fout = new FileOutputStream(fd); 22748c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn PrintWriter pw = new FastPrintWriter(fout); 2275daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn dumpService(pw, fd, Context.ACTIVITY_SERVICE, new String[] { 2276daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn "-a", "package", packageName }); 2277cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.println(); 2278daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn dumpService(pw, fd, "meminfo", new String[] { "--local", packageName }); 2279daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn pw.println(); 2280daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn dumpService(pw, fd, ProcessStats.SERVICE_NAME, new String[] { "-a", packageName }); 2281904a857d5a319e32d1df065b38e3191324b35b0fDianne Hackborn pw.println(); 2282904a857d5a319e32d1df065b38e3191324b35b0fDianne Hackborn dumpService(pw, fd, "usagestats", new String[] { "--packages", packageName }); 2283cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.println(); 22848c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn dumpService(pw, fd, "package", new String[] { packageName }); 22858c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn pw.println(); 22868c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn dumpService(pw, fd, BatteryStats.SERVICE_NAME, new String[] { packageName }); 2287cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.flush(); 2288cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 2289cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn 2290cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn private static void dumpService(PrintWriter pw, FileDescriptor fd, String name, String[] args) { 2291cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.print("DUMP OF SERVICE "); pw.print(name); pw.println(":"); 2292cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn IBinder service = ServiceManager.checkService(name); 2293cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn if (service == null) { 2294cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.println(" (Service not found)"); 2295cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn return; 2296cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 2297cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn TransferPipe tp = null; 2298cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn try { 2299cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.flush(); 2300cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn tp = new TransferPipe(); 2301cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn tp.setBufferPrefix(" "); 2302daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn service.dumpAsync(tp.getWriteFd().getFileDescriptor(), args); 2303cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn tp.go(fd); 2304cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } catch (Throwable e) { 2305cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn if (tp != null) { 2306cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn tp.kill(); 2307cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 2308cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn pw.println("Failure dumping service:"); 2309cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn e.printStackTrace(pw); 2310cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 2311cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn } 23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2313