SuperMan-Lfj / blog

Apache License 2.0
1 stars 0 forks source link

Android 设备信息相关代码 #45

Open SuperMan-Lfj opened 3 years ago

SuperMan-Lfj commented 3 years ago

实时获取当前app内存占用

读取内存信息,跟Android Profiler 分析一致。其他的都不准。

@TargetApi(Build.VERSION_CODES.M)
    private double getRunningMemory() {
        double mem = 0.0D;
        try {
            // 统计进程的内存信息 totalPss
            final Debug.MemoryInfo[] memInfo = activityManager.getProcessMemoryInfo(new int[]{Process.myPid()});
            if (memInfo.length > 0) {
                String java_mem = memInfo[0].getMemoryStat("summary.java-heap");
                String native_mem = memInfo[0].getMemoryStat("summary.native-heap");
                String graphics_mem = memInfo[0].getMemoryStat("summary.graphics");
                String stack_mem = memInfo[0].getMemoryStat("summary.stack");
                String code_mem = memInfo[0].getMemoryStat("summary.code");
                String others_mem = memInfo[0].getMemoryStat("summary.system");
                final int dalvikPss = ConvertUtils.convertToInt(java_mem,0)
                        + ConvertUtils.convertToInt(native_mem,0)
                        + ConvertUtils.convertToInt(graphics_mem,0)
                        + ConvertUtils.convertToInt(stack_mem,0)
                        + ConvertUtils.convertToInt(code_mem,0)
                        + ConvertUtils.convertToInt(others_mem,0);

                if (dalvikPss >= 0) {
                    // Mem in MB
                    mem = dalvikPss / 1024.0D;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mem;
    }
/**
     * 转化为int
     * @param value 传入对象
     * @param defaultValue 发生异常时,返回默认值
     * @return
     */
    public final static int convertToInt(Object value, int defaultValue){

        if (value == null || "".equals(value.toString().trim())){
            return defaultValue;
        }

        try {
            return Integer.valueOf(value.toString());
        }catch (Exception e){
            try {
                return Integer.valueOf(String.valueOf(value));
            }catch (Exception e1) {
                try {
                    return Double.valueOf(value.toString()).intValue();
                }catch (Exception e2){
                    return defaultValue;
                }
            }
        }
    }

参考链接: https://www.jianshu.com/p/9a7a65f12c01