Android 代码打印meminfo

旨在替代adb shell dumpsys meminfo packageName,在log打印meminfo,以便分析内存情况

ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
long totalMemory = Runtime.getRuntime().totalMemory();

这种代码获取的内存信息用处不大,需要使用Debug.MemoryInfo

Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
Debug.getMemoryInfo(memoryInfo);
memoryInfo.getMemoryStats();

log打印如下:

关键代码如下:

    private static final String TAG_MEM_INFO = "MemInfo-packageName";

    private static void printDebugMeminfo() {
        Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
        Debug.getMemoryInfo(memoryInfo);
        int getTotalPss = memoryInfo.getTotalPss();
        int nativePss = memoryInfo.nativePss;
        int dalvikPss = memoryInfo.dalvikPss;
        int otherPss = memoryInfo.otherPss;
        Log.i(TAG_MEM_INFO, "DebugMeminfo getTotalPss:" + aiKBToM(getTotalPss) + "  nativePss:" + aiKBToM(nativePss)
                + "  dalvikPss:" + aiKBToM(dalvikPss) + "  otherPss:" + aiKBToM(otherPss)
        );

        Map<String, String> memStats = memoryInfo.getMemoryStats();
        for (Map.Entry<String, String> entry : memStats.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            Log.i(TAG_MEM_INFO, "DebugMeminfo key = " + String.format("%-22s", key) + " value = " + aiKBToM(value));
        }
    }

    private static String aiKBToM(String kb) {
        int k = Integer.parseInt(kb);
        if (k > 100 * 1024) {
            return (k / 1024) + " M";
        } else {
            return kb + " KB";
        }
    }

    private static String aiKBToM(long kb) {
        if (kb > 100 * 1024) {
            return (kb / 1024) + " M";
        } else {
            return kb + " KB";
        }
    }

    private static void printMeminfo(Activity activity) {
        ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);
        long totalMemory = Runtime.getRuntime().totalMemory();
        long freeMemory = Runtime.getRuntime().freeMemory();
        long usedMemory = totalMemory - freeMemory;
        long availableMemory = memoryInfo.availMem;
        Log.i(TAG_MEM_INFO, "Meminfo totalMemory:" + aiKBToM(totalMemory / 1024) + " freeMemory:" + aiKBToM(freeMemory / 1024) +
                " usedMemory:" + aiKBToM(usedMemory / 1024) + " availableMemory:" + aiKBToM(availableMemory / 1024)
        );
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值