android.app.ActivityManager#getProcessMemoryInfo ( )源码实例Demo

下面列出了android.app.ActivityManager#getProcessMemoryInfo ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: GTTools   文件: MEMUtils.java
/**
 * 获取进程内存PSS数据
 *
 * @param context Android上下文
 * @param pid 进程ID
 * @return {nativePss,dalvikPss,TotalPss}
 */
public static long[] getPSS(Context context, int pid) {
	long[] value = new long[3]; // Natvie Dalvik Total
	if (pid >= 0) {
		int[] pids = new int[1];
		pids[0] = pid;
		ActivityManager mAm = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		MemoryInfo[] memoryInfoArray = mAm.getProcessMemoryInfo(pids);
		MemoryInfo pidMemoryInfo = memoryInfoArray[0];

		value[0] = pidMemoryInfo.nativePss;
		value[1] = pidMemoryInfo.dalvikPss;
		value[2] = pidMemoryInfo.getTotalPss();
	} else {
		value[0] = 0;
		value[1] = 0;
		value[2] = 0;
	}

	return value;
}
 
源代码2 项目: AndroidChromium   文件: GSAServiceClient.java
/**
 * Get the PSS used by the process hosting a service.
 *
 * @param packageName Package name of the service to search for.
 * @return the PSS in kB of the process hosting a service, or INVALID_PSS.
 */
@VisibleForTesting
static int getPssForService(ComponentName componentName) {
    if (componentName == null) return INVALID_PSS;
    Context context = ContextUtils.getApplicationContext();
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> services =
            activityManager.getRunningServices(1000);
    if (services == null) return INVALID_PSS;
    int pid = -1;
    for (ActivityManager.RunningServiceInfo info : services) {
        if (componentName.equals(info.service)) {
            pid = info.pid;
            break;
        }
    }
    if (pid == -1) return INVALID_PSS;
    Debug.MemoryInfo infos[] = activityManager.getProcessMemoryInfo(new int[] {pid});
    if (infos == null || infos.length == 0) return INVALID_PSS;
    return infos[0].getTotalPss();
}
 
源代码3 项目: mytracks   文件: BigTestUtils.java
/**
 * Gets the memory usage of MyTracks process. This method would get the Pss
 * memory. Pss is the amount of memory shared with other processes, accounted
 * in a way that the amount is divided evenly between the processes that share
 * it. This is memory that would not be released if the process was
 * terminated, but is indicative of the amount that this process is
 * "contributing" to the overall memory load.
 * 
 * @param context
 */
public static String getMyTracksPssMemoryInfo(Context context) {
  int MyTracksProcessId = -1;
  ActivityManager activityManager = (ActivityManager) context
      .getSystemService(Activity.ACTIVITY_SERVICE);
  List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();

  for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
    if (runningAppProcessInfo.processName.equalsIgnoreCase(MYTRACKS_PROCESS_NAME)) {
      MyTracksProcessId = runningAppProcessInfo.pid;
      break;
    }
  }
  if (MyTracksProcessId == -1) {
    Assert.fail();
  }
  int pids[] = { MyTracksProcessId };
  android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
  int memoryUsage = memoryInfoArray[0].getTotalPss();
  return String.format(Locale.US, " MyTracks TotalPss Memory: %d (kB) ", memoryUsage);
}
 
源代码4 项目: 365browser   文件: GSAServiceClient.java
/**
 * Get the PSS used by the process hosting a service.
 *
 * @param packageName Package name of the service to search for.
 * @return the PSS in kB of the process hosting a service, or INVALID_PSS.
 */
@VisibleForTesting
static int getPssForService(ComponentName componentName) {
    if (componentName == null) return INVALID_PSS;
    Context context = ContextUtils.getApplicationContext();
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> services =
            activityManager.getRunningServices(1000);
    if (services == null) return INVALID_PSS;
    int pid = -1;
    for (ActivityManager.RunningServiceInfo info : services) {
        if (componentName.equals(info.service)) {
            pid = info.pid;
            break;
        }
    }
    if (pid == -1) return INVALID_PSS;
    Debug.MemoryInfo infos[] = activityManager.getProcessMemoryInfo(new int[] {pid});
    if (infos == null || infos.length == 0) return INVALID_PSS;
    return infos[0].getTotalPss();
}
 
源代码5 项目: GTTools   文件: MEMUtils.java
/**
 * 获取进程内存Private Dirty数据
 * 
 * @param context Android上下文
 * @param pid 进程ID
 * @return {nativePrivateDirty,dalvikPrivateDirty,TotalPrivateDirty}
 */
public static long[] getPrivDirty(Context context, int pid) {

	ActivityManager mAm = (ActivityManager) context
			.getSystemService(Context.ACTIVITY_SERVICE);
	int[] pids = new int[1];
	pids[0] = pid;
	MemoryInfo[] memoryInfoArray = mAm.getProcessMemoryInfo(pids);
	MemoryInfo pidMemoryInfo = memoryInfoArray[0];
	long[] value = new long[3]; // Natvie Dalvik Total
	value[0] = pidMemoryInfo.nativePrivateDirty;
	value[1] = pidMemoryInfo.dalvikPrivateDirty;
	value[2] = pidMemoryInfo.getTotalPrivateDirty();
	return value;
}
 
源代码6 项目: MemoryMonitor   文件: MemoryUtil.java
/**
 * 获取应用实际占用内存
 *
 * @param context
 * @param pid
 * @return 应用pss信息KB
 */
public static PssInfo getAppPssInfo(Context context, int pid) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    Debug.MemoryInfo memoryInfo = am.getProcessMemoryInfo(new int[]{pid})[0];
    PssInfo pssInfo = new PssInfo();
    pssInfo.totalPss = memoryInfo.getTotalPss();
    pssInfo.dalvikPss = memoryInfo.dalvikPss;
    pssInfo.nativePss = memoryInfo.nativePss;
    pssInfo.otherPss = memoryInfo.otherPss;
    return pssInfo;
}
 
源代码7 项目: AppCrawler   文件: MemInfo.java
public static android.os.Debug.MemoryInfo getProcessMemInfo (int pid) {
    Context context = InstrumentationRegistry.getContext();
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    int[] pids = new int[1];
    pids[0] = pid;
    android.os.Debug.MemoryInfo[] mems = am.getProcessMemoryInfo(pids);
    return mems[0];
}
 
/**
 * Function computes "Total Private Dirty Memory" consumed by this application only.
 * @return
 */
public String getMemoryUsage()
{
	ActivityManager mgr = (ActivityManager)appContext.getSystemService("activity");
	String totalPrivateDirtyMemory = "";
	
	for(RunningAppProcessInfo processInfo : mgr.getRunningAppProcesses())
	{
		
        if(processInfo.processName.equals(SharedData.appProcessName)) {//appProcessName) ){
        	//Log.i(TAG, " MFCC pid: "+processInfo.pid);                    
		    int[] pids = new int[1];
		    pids[0] = processInfo.pid;
		    android.os.Debug.MemoryInfo[] MI = mgr.getProcessMemoryInfo(pids);
     	    Log.i(TAG,"MFCC total private dirty memory (KB): " + MI[0].getTotalPrivateDirty());
     	    
     	    
     	    totalPrivateDirtyMemory = String.valueOf(MI[0].getTotalPrivateDirty());
		    
		    break;
        }
    }
	
	return totalPrivateDirtyMemory;

	
}
 
/**
 * Function computes "Total Private Dirty Memory" consumed by this application only.
 * @return
 */
private String getMemoryUsage()
{
	Context context = getApplicationContext();
	ActivityManager mgr = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
	String totalPrivateDirtyMemory = "";
	
	for(RunningAppProcessInfo processInfo : mgr.getRunningAppProcesses())
	{
		
        if(processInfo.processName.equals(appProcessName) ){
        	//Log.i(TAG, " MFCC pid: "+processInfo.pid);                    
		    int[] pids = new int[1];
		    pids[0] = processInfo.pid;
		    android.os.Debug.MemoryInfo[] MI = mgr.getProcessMemoryInfo(pids);
     	    Log.i(TAG,"MFCC total private dirty memory (KB): " + MI[0].getTotalPrivateDirty());
     	    
     	    
     	    totalPrivateDirtyMemory = String.valueOf(MI[0].getTotalPrivateDirty());
		    
		    break;
        }
    }
	
	return totalPrivateDirtyMemory;

    
    
}
 
源代码10 项目: MobileGuard   文件: ProcessManagerEngine.java
/**
 * get running processes info
 * you just can use it before Android 5.0
 * @param context
 * @return
 */
public static List<ProcessInfoBean> getRunningProcessesInfoCompat(Context context) {
    // get manager
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    PackageManager pm = context.getPackageManager();
    // get processes info
    List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();
    // create list. Specific it init size
    List<ProcessInfoBean> infos = new ArrayList<>(processes.size());
    // get info
    for (ActivityManager.RunningAppProcessInfo processInfo : processes) {
        // create bean
        ProcessInfoBean bean = new ProcessInfoBean();
        // set value
        bean.setPackageName(processInfo.processName);
        // get package info
        ApplicationInfo applicationInfo = null;
        try {
            applicationInfo = pm.getApplicationInfo(bean.getPackageName(), PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            // if package is empty, continue
            continue;
        }
        // set icon
        bean.setIcon(applicationInfo.loadIcon(pm));
        // app name
        bean.setAppName(applicationInfo.loadLabel(pm).toString());
        // system app
        if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            bean.setSystemApp(true);
        }// if not, need set false. Actually it was.
        // memory
        Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{processInfo.pid});
        if (processMemoryInfo.length >= 1) {
            bean.setMemory(processMemoryInfo[0].getTotalPss() * 1024);
        }
        // add to list
        infos.add(bean);
    }

    return infos;
}
 
源代码11 项目: MobileGuard   文件: ProcessManagerEngine.java
/**
 * get running processes info by proc
 * @param context
 * @return
 */
public static List<ProcessInfoBean> getRunningProcessesInfoByProc(Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    PackageManager pm = context.getPackageManager();
    // get running app processes info
    List<AndroidAppProcess> processes = AndroidProcesses.getRunningAppProcesses();
    // create list. Specific it init size
    List<ProcessInfoBean> infos = new ArrayList<>(processes.size());
    for (AndroidAppProcess process: processes) {
        // create bean
        ProcessInfoBean bean = new ProcessInfoBean();
        // get package name
        bean.setPackageName(process.getPackageName());
        // check empty
        if(TextUtils.isEmpty(bean.getPackageName())) {
            continue;
        }
        // get package info
        ApplicationInfo applicationInfo = null;
        try {
            applicationInfo = pm.getApplicationInfo(bean.getPackageName(), PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            // if package is empty, continue
            continue;
        }
        // set icon
        bean.setIcon(applicationInfo.loadIcon(pm));
        // app name
        bean.setAppName(applicationInfo.loadLabel(pm).toString());
        // system app
        if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            bean.setSystemApp(true);
        }// if not, need set false. Actually it was.
        // memory
        Debug.MemoryInfo[] processMemoryInfo = am.getProcessMemoryInfo(new int[]{process.pid});
        if (processMemoryInfo.length >= 1) {
            bean.setMemory(processMemoryInfo[0].getTotalPss() * 1024);
        }
        // add to list
        infos.add(bean);
    }
    return infos;
}
 
源代码12 项目: batteryhub   文件: Memory.java
/**
 * Read memory usage using the public Android API methods in ActivityManager,
 * such as MemoryInfo and getProcessMemoryInfo.
 *
 * @param context the Context from the running Activity.
 * @return array of int values with total and used memory, in KB.
 */
@TargetApi(21)
public static int[] readMemory(final Context context) {
    int[] pIds;
    int total;
    int used = 0;
    int counter = 0;
    int memoryUsed = 0;

    ActivityManager manager = (ActivityManager)
            context.getSystemService(Activity.ACTIVITY_SERVICE);
    ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();

    manager.getMemoryInfo(memoryInfo);
    total = (int) memoryInfo.availMem;

    List<ActivityManager.RunningAppProcessInfo> processInfoList =
            manager.getRunningAppProcesses();
    List<ActivityManager.RunningServiceInfo> serviceInfoList =
            manager.getRunningServices(Integer.MAX_VALUE);

    if (processInfoList == null || serviceInfoList == null) {
        return new int[] {total, used};
    }

    pIds = new int[processInfoList.size() + serviceInfoList.size()];

    for (ActivityManager.RunningAppProcessInfo processInfo : processInfoList) {
        pIds[counter] = processInfo.pid;
        counter++;
    }

    for (ActivityManager.RunningServiceInfo serviceInfo : serviceInfoList) {
        pIds[counter] = serviceInfo.pid;
        counter++;
    }

    // Two approaches one for Debug and other for Production
    // TODO: Do further testing to check Debug.MemoryInfo vs ActivityManager.MemoryInfo...

    // 1) ActivityManager.MemoryInfo
    manager.getMemoryInfo(memoryInfo);

    String message =
            String.format(Locale.US, "%d availMem, %b lowMemory, %d threshold, %d total",
                    memoryInfo.availMem, memoryInfo.lowMemory,
                    memoryInfo.threshold, memoryInfo.totalMem);

    logI(TAG, message);

    // 2) Debug.MemoryInfo
    Debug.MemoryInfo[] memoryInfosArray = manager.getProcessMemoryInfo(pIds);

    for (Debug.MemoryInfo memory : memoryInfosArray) {
        memoryUsed += memory.getTotalPss();
    }

    return new int[] {total, used};
}