public class AndroidProcesses
extends java.lang.Object
Helper class to get a list of processes on Android.
Usage:
Get a list of running apps:
List<AndroidAppProcess> processes = AndroidProcesses.getRunningAppProcesses();
Get some information about a process:
AndroidAppProcess process = processes.get(location); String processName = process.name; Stat stat = process.stat(); int pid = stat.getPid(); int parentProcessId = stat.ppid(); long startTime = stat.stime(); int policy = stat.policy(); char state = stat.state(); Statm statm = process.statm(); long totalSizeOfProcess = statm.getSize(); long residentSetSize = statm.getResidentSetSize(); PackageInfo packageInfo = process.getPackageInfo(context, 0); String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
Check if your app is in the foreground:
if (AndroidProcesses.isMyProcessInTheForeground()) {
// do stuff
}
Get a list of application processes that are running on the device:
List<ActivityManager.RunningAppProcessInfo> processes = AndroidProcesses.getRunningAppProcessInfo(context);
Limitations
System apps may not be visible because they have a higher SELinux context than third party apps.
Some information that was available through ActivityManager.getRunningAppProcesses() is not available
using this library
(ActivityManager.RunningAppProcessInfo.pkgList,
ActivityManager.RunningAppProcessInfo.lru,
ActivityManager.RunningAppProcessInfo.importance,
etc.).
This is currently not working on the N developer preview.
Note: You should avoid running methods from this class on the UI thread.
| Modifier and Type | Class and Description |
|---|---|
static class |
AndroidProcesses.ProcessComparator
A
Comparator to list processes by name |
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
TAG |
| Modifier and Type | Method and Description |
|---|---|
static java.util.List<AndroidAppProcess> |
getRunningAppProcesses() |
static java.util.List<android.app.ActivityManager.RunningAppProcessInfo> |
getRunningAppProcessInfo(android.content.Context context)
Returns a list of application processes that are running on the device.
|
static java.util.List<AndroidAppProcess> |
getRunningForegroundApps(android.content.Context context)
Get a list of user apps running in the foreground.
|
static java.util.List<AndroidProcess> |
getRunningProcesses() |
static boolean |
isLoggingEnabled() |
static boolean |
isMyProcessInTheForeground() |
static boolean |
isProcessInfoHidden()
On Android 7.0+ the procfs filesystem is now mounted with hidepid=2, eliminating access to the /proc/PID
directories of other users.
|
static void |
log(java.lang.String message,
java.lang.Object... args)
Send a log message if logging is enabled.
|
static void |
log(java.lang.Throwable error,
java.lang.String message,
java.lang.Object... args)
Send a log message if logging is enabled.
|
static void |
setLoggingEnabled(boolean enabled)
Toggle whether debug logging is enabled.
|
public static final java.lang.String TAG
public static void setLoggingEnabled(boolean enabled)
enabled - true to enable logging. This should be only be used for debugging purposes.isLoggingEnabled(),
log(String, Object...),
log(Throwable, String, Object...)public static boolean isLoggingEnabled()
true if logging is enabled.setLoggingEnabled(boolean)public static void log(java.lang.String message,
java.lang.Object... args)
message - the message to logargs - list of arguments to pass to the formatterpublic static void log(java.lang.Throwable error,
java.lang.String message,
java.lang.Object... args)
error - An exception to logmessage - the message to logargs - list of arguments to pass to the formatterpublic static boolean isProcessInfoHidden()
UsageStatsManager
or have root access.true if procfs is mounted with hidepid=2public static java.util.List<AndroidProcess> getRunningProcesses()
public static java.util.List<AndroidAppProcess> getRunningAppProcesses()
public static java.util.List<AndroidAppProcess> getRunningForegroundApps(android.content.Context context)
context - the application contextpublic static boolean isMyProcessInTheForeground()
true if this process is in the foreground.public static java.util.List<android.app.ActivityManager.RunningAppProcessInfo> getRunningAppProcessInfo(android.content.Context context)
NOTE: On Lollipop (SDK 22) this does not provide
ActivityManager.RunningAppProcessInfo.pkgList,
ActivityManager.RunningAppProcessInfo.importance,
ActivityManager.RunningAppProcessInfo.lru,
ActivityManager.RunningAppProcessInfo.importanceReasonCode,
ActivityManager.RunningAppProcessInfo.importanceReasonComponent,
ActivityManager.RunningAppProcessInfo.importanceReasonPid,
etc. If you need more process information try using
getRunningAppProcesses() or UsageStatsManager
context - the application context