zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android 关于获取内存的三种小方式

Android内存 获取 方式 关于 三种
2023-09-14 09:04:17 时间

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

👉实践过程

😜方式一

用过linux的都知道有这样一行命令:cat /proc/meminfo 查询内存使用详情文件(查询CPU使用详情文件:cat / proc/cpuinfo),查询结果如图:

在这里插入图片描述

如果你需要查询的是手机的内存,只要在cat命令前 加 adb shell即可

😜方式二

我们可以通过MemoryInfo获取(遗憾的是这里只能获取到剩余内存):

/** 
 * 获取当前可用内存,返回数据以字节为单位。 
 * @author https://zhima.blog.csdn.net/
 * @param context 可传入应用程序上下文。 
 * @return  当前可用内存。 
 */  
private static long getAvailableMemory(Context context) {  
    ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo(); 
    //利用ActivityManager的getMemoryInfo获取到内存的一些信息赋给info 
    getActivityManager(context).getMemoryInfo(info);  
    long availableSize = info.availMem;     //availMem为系统可用内存
    return availableSize;  
} /** 
 * 
 * @param context 可传入应用程序上下文。 
 * @return ActivityManager的实例,用于获取手机可用内存。 
 */  
private static ActivityManager getActivityManager(Context context) {  
    if (mActivityManager == null) {  
        mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
    }  
    return mActivityManager;  
}  

其中除了availMem还用3个参数

long类型 totalMem 内核RAM的总内存

long类型 threshold 当系统剩余内存低于 threshold 时就看成低内存运行

boolean类型 lowMemory 系统是否处于低内存运行

注意:不过,这三个没用过,不知道能不能用,有机会试试!

😜方式三

既然命令行可以打开文件,那么我们自然能够想到通过读取文件流的方式获取:

public static String getUsedPercentValue(Context context) {  
        //内存信息文件(CPU信息文件:/proc/cpuinfo)  
        String dir = "/proc/meminfo";  
        try {  
            FileReader fr = new FileReader(dir);  
            //创建读取字符流缓存区  
            BufferedReader br = new BufferedReader(fr, 2048);  
            //读取第一行字符  
            String memoryLine = br.readLine();  
            String subMemoryLine = memoryLine.substring(memoryLine.indexOf("MemTotal:"));  
            memoryLine = br.readLine();  
            String availableMemoryLine = memoryLine.substring(memoryLine.indexOf("MemFree:"));  
            br.close();  
            //获取总的内存,这里需要注意的是replaceAll支持正则表达式"\\D"代表所有的字母字符,只保留数字部分  
            long totalMemorySize = Integer.parseInt(subMemoryLine.replaceAll("\\D+", ""));  
            //获取当前可用内存  
            long availableSize = Integer.parseInt(availableMemoryLine.replaceAll("\\D+", ""));  
            int percent = (int) ((totalMemorySize - availableSize) / (float) totalMemorySize * 100);  
            return percent + "%";  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return "悬浮窗";  
    }  

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇