ActivityManager
3521 ワード
前言
このセクションでは、Activity Managerの使用について説明します.Activity Managerを使用すると、プロセスなど、システムで実行されているactivities、アプリケーション/パッケージ、サービス(Service)、タスク(Task)の情報を入手できます. ActivityManager.MemoryInfoグローバルメモリ使用情報long availMemシステム使用可能メモリlong totalMem総メモリlong threshold低メモリバルブ値boolean lowMemory現在使用可能メモリ<=thresholdこの値が真 である場合 Debug.MemoryInfo統計プロセスにおけるメモリ情報 RunningAppProcessInfo実行プロセス情報String processNameパッケージ名int pidプロセスpid int uidプロセスuid String[]pkgListこのプロセスの下にあるすべてのプログラムのパッケージ名 を取得する. RunningServiceInfoパッケージサービスを実行する情報activeSinceが最初にアクティブ化された時間foregroundサービスがバックグラウンドで を実行するかどうか ActivityManager.RunningTaskInfo
例
統計プロセス情報
フロントエンドで実行中のactivityを取得し、アプリケーションがフロントエンドで実行されているか否かを判断する
このセクションでは、Activity Managerの使用について説明します.Activity Managerを使用すると、プロセスなど、システムで実行されているactivities、アプリケーション/パッケージ、サービス(Service)、タスク(Task)の情報を入手できます.
例
統計プロセス情報
private List getRunningProcessInfo() {
mAmProcessInfoList = new ArrayList();
List appProcessList = mActivityManager.getRunningAppProcesses();
for (int i = 0; i < appProcessList.size(); i++) {
ActivityManager.RunningAppProcessInfo info = appProcessList.get(i);
int pid = info.pid;
int uid = info.uid;
String processName = info.processName;
int[] memoryPid = new int[]{pid};
Debug.MemoryInfo[] memoryInfo = mActivityManager.getProcessMemoryInfo(memoryPid); //
int memorySize = memoryInfo[0].getTotalPss();
AMProcessInfo processInfo = new AMProcessInfo();
processInfo.setPid("" + pid);
processInfo.setUid("" + uid);
processInfo.setMemorySize("" + memorySize);
processInfo.setProcessName(processName);
mAmProcessInfoList.add(processInfo);
}
return mAmProcessInfoList;
}
public class AMProcessInfo {
private String pid;
private String uid;
private String memorySize;
private String processName;
public AMProcessInfo() {
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getMemorySize() {
return memorySize;
}
public void setMemorySize(String memorySize) {
this.memorySize = memorySize;
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
}
フロントエンドで実行中のactivityを取得し、アプリケーションがフロントエンドで実行されているか否かを判断する
public static String getTopActivityName(Context context) {
String topActivityClassName = null;
ActivityManager activityManager = (ActivityManager) (context.getSystemService(Context.ACTIVITY_SERVICE));
List runningTaskInfos = activityManager.getRunningTasks(1);
if (runningTaskInfos != null) {
ComponentName f = runningTaskInfos.get(0).topActivity;
topActivityClassName = f.getClassName();
}
return topActivityClassName;
}
//
public static boolean isRunningForeground(Context context) {
String packageName = context.getPackageName();
String topActivityClassName = getTopActivityName(context);
if (packageName != null && topActivityClassName != null && topActivityClassName.startsWith(packageName)) {
return true;
} else {
return false;
}
}