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


  • 統計プロセス情報
    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;
        }
    }