找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 347|回复: 0

Android得到内存信息

[复制链接]

70

主题

11

回帖

286

积分

管理员

积分
286
发表于 2025-2-5 20:04:03 | 显示全部楼层 |阅读模式
Android程序为了排查性能问题,或者做APM,需要监控内存信息,有如下两个方法可以得到内存信息。
使用ActivityManager类获取系统内存信息
ActivityManager类提供了获取系统内存信息的功能。你可以通过调用ActivityManager.getMemoryInfo()方法来获取内存信息。
[color=var(--hltools-color)]

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memoryInfo);

        long totalMemory = memoryInfo.totalMem; // 总内存
        long availableMemory = memoryInfo.availMem; // 可用内存

        Log.d("MemoryInfo", "Total Memory: " + totalMemory + " bytes");
        Log.d("MemoryInfo", "Available Memory: " + availableMemory + " bytes");
    }
}
读取/proc/meminfo文件
Android系统提供了一个名为/proc/meminfo的文件,其中包含了详细的内存信息。你可以通过读取这个文件来获取手机的总内存和可用内存等信息。
但是该方法需要时系统app才有这个权限,需要注意。
[color=var(--hltools-color)][size=1.15em]

public class MemoryInfoUtil {
    public static String getTotalMemory() {
        String memInfoPath = "/proc/meminfo";
        String totalMemory = "";
        try (BufferedReader br = new BufferedReader(new FileReader(memInfoPath))) {
            String line;
            while ((line = br.readLine()) != null) {
                if (line.contains("MemTotal:")) {
                    String[] splits = line.split("\\s+");
                    totalMemory = splits[1];
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return totalMemory.isEmpty() ? "0" : totalMemory;
    }

    public static String getAvailableMemory() {
        String memInfoPath = "/proc/meminfo";
        String availableMemory = "";
        try (BufferedReader br = new BufferedReader(new FileReader(memInfoPath))) {
            String line;
            while ((line = br.readLine()) != null) {
                if (line.contains("MemFree:")) {
                    String[] splits = line.split("\\s+");
                    availableMemory = splits[1];
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return availableMemory.isEmpty() ? "0" : availableMemory;
    }
}



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件开发

GMT+8, 2025-8-27 13:23 , Processed in 0.144360 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表