ActivityManager是Android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,是与系统所有正在运行着的Acitivity进行交互,ActivityManager作为Activity管理者这么个角色,起着比较重要的作用。通过ActivityManager我们可以获得系统里正在运行的Activities,包括进程信息、应用程序包信息、服务信息(Service)及任务信息(Task)等。
静态内部类
-
ActivityManager.MemoryInfo: 系统可用内存信息
MemoryInfo中重要的字段:
availMem(系统可用内存)
totalMem(总内存)
threshold(低内存阈值,即低内存的临界线)
lowMemory(是否为低内存状态) -
ActivityManager.RunningAppProcessInfo: 正在运行的进程信息
相关字段:
processName(进程名)
pid(进程pid)
uid(进程uid)
pkgList(该进程下所有的包) -
ActivityManager.RunningServiceInfo: 正在运行的服务信息
其中除了服务进程信息外还有一些其它信息,相关字段:
activeSince(第一次被激活的时间、方式)
foreground(服务是否在后台执行)。 -
ActivityManager.RunningTaskInfo: 正在运行的任务信息
相关字段:
id(该任务的唯一标识)
baseActivity(该任务栈的基础Activity)
topActivity(该任务栈栈顶的Activity)
numActivities(该任务栈中Activity数量)
description(任务当前状态描述)
常用工具类方法
1.判断应用是否在前台运行
public boolean isRunningForeground(Context context){
String packageName=getPackageName(context);
String topActivityClassName=getTopActivityName(context);
if (packageName!=null&&topActivityClassName!=null&&topActivityClassName.startsWith(packageName)) {
System.out.println("应用在前台执行");
return true;
} else {
System.out.println("应用在后台执行");
return false;
}
}
2.判断应用是否在运行
public boolean isRun(Context context,String mPackageName){
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> list = am.getRunningTasks(100);
boolean isAppRunning = false;
//100表示取的最大的任务数,info.topActivity表示当前正在运行的Activity,info.baseActivity表示系统后台有此进程在运行
for (RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(mPackageName) || info.baseActivity.getPackageName().equals(mPackageName)) {
isAppRunning = true;
Log.i("ActivityService",info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
break;
}
}
if(isAppRunning){
Log.i("ActivityService", "该程序正在运行");
}else{
Log.i("ActivityService", "该程序没有运行");
}
return isAppRunning;
}
3.获取栈顶ActivityName
public String getTopActivityName(Context context){
String topActivityClassName=null;
ActivityManager activityManager =
(ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
List<runningtaskinfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
if(runningTaskInfos != null){
ComponentName f=runningTaskInfos.get(0).topActivity;
topActivityClassName=f.getClassName();
}
return topActivityClassName;
}
public String getPackageName(Context context){
String packageName = context.getPackageName();
return packageName;
}