Android总内存与当前可用内存

时间:2022-10-31 10:20:31

private void showMemory() {
// 1.Internal Memory
// ActivityManager.MemoryInfo
ActivityManager actMgr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
actMgr.getMemoryInfo(memoryInfo);
LogOut.out(this, "availMem=" + (memoryInfo.availMem >> 20) + "M");
LogOut.out(this, "threshold=" + (memoryInfo.threshold >> 20)
+ "M and isLowMemory=" + memoryInfo.lowMemory);
// Environment:Data
showEnvironment(Environment.getDataDirectory());
// Environment:System
showEnvironment(Environment.getRootDirectory());
// Environment:Cache
showEnvironment(Environment.getDownloadCacheDirectory());
}

private void showEnvironment(File path) {
LogOut.out(this, "AbsolutePath=" + path.getAbsolutePath() + " Path="
+ path.getPath());
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long avaiableBlocks = stat.getAvailableBlocks();
long avaiableSize = avaiableBlocks * blockSize;
long blockCount = stat.getBlockCount();
long blockAllSize = blockCount * blockSize;
LogOut.out(this, "avaiableSize=" + (avaiableSize >> 20) + "M");
LogOut.out(this, "blockAllSize=" + (blockAllSize >> 20) + "M");
}


Log信息为:


11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->availMem=134M
11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->threshold=16M and isLowMemory=false

11-15 17:00:02.179: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->AbsolutePath=/data Path=/data
11-15 17:00:02.179: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->avaiableSize=93M
11-15 17:00:02.179: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->blockAllSize=185M

11-15 17:00:02.179: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->AbsolutePath=/system Path=/system
11-15 17:00:02.179: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->avaiableSize=141M
11-15 17:00:02.189: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->blockAllSize=240M

11-15 17:00:02.189: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->AbsolutePath=/cache Path=/cache
11-15 17:00:02.189: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->avaiableSize=5M
11-15 17:00:02.189: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->blockAllSize=40M


而我用一个工具测的数据则是:
133.1M可用内存,54% Used   46% Free

到底如何确定当前系统可用内存与总内存大小呢?谢谢...

6 个解决方案

#1


11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->availMem=134M
这个就是吧。
最好在真机上测,不要在模拟器上测。

#2


引用 1 楼 dinjay 的回复:
11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->availMem=134M
这个就是吧。
最好在真机上测,不要在模拟器上测。


晕,这是真机的log


那如何获取总内存大小呢?谢谢...

#4


引用 3 楼 zhq56030207 的回复:
多查查资料吧http://www.qiyeku.com/AdminExe/NewsShowTmp.Asp?Id=963181&2010-11-16%2019:23:02


请问你给的资料对这个问题有新的帮助吗?

你发的链接中

    static public long getAvailableInternalMemorySize() {   
        File path = Environment.getDataDirectory();   
        StatFs stat = new StatFs(path.getPath());   
        long blockSize = stat.getBlockSize();   
        long availableBlocks = stat.getAvailableBlocks();   
        return availableBlocks * blockSize;   
    }   
       
    static public long getTotalInternalMemorySize() {   
        File path = Environment.getDataDirectory();   
        StatFs stat = new StatFs(path.getPath());   
        long blockSize = stat.getBlockSize();   
        long totalBlocks = stat.getBlockCount();   
        return totalBlocks * blockSize;   
    }   
       
    static public long getAvailableExternalMemorySize() {   
        if(externalMemoryAvailable()) {   
            File path = Environment.getExternalStorageDirectory();   
            StatFs stat = new StatFs(path.getPath());   
            long blockSize = stat.getBlockSize();   
            long availableBlocks = stat.getAvailableBlocks();   
            return availableBlocks * blockSize;   
        } else {   
            return ERROR;   
        }   
    }   


这三个方法所显示的内存大小的方法和我发的代码是一样的


        // Environment:Data
        showEnvironment(Environment.getDataDirectory());
        // Environment:System
        showEnvironment(Environment.getRootDirectory());


我没期望也没权力要求懂的人必须来回帖子,但我希望回我帖子的人在回帖的时候已经明白了我的问题。

#5


已解决
adb shell下命令

cat /proc/meminfo


详细见:
http://blog.csdn.net/sodino/archive/2010/10/14/5941308.aspx

看来自己也晕了,问的问题之前已经有接触过了,现在才反应过来。算是温故知新吧。

#6


已解决的话,收垃圾来喽....

#1


11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->availMem=134M
这个就是吧。
最好在真机上测,不要在模拟器上测。

#2


引用 1 楼 dinjay 的回复:
11-15 17:00:02.169: DEBUG/ANDROID_INFO(1827): lab.sodino.task.TaskAct->availMem=134M
这个就是吧。
最好在真机上测,不要在模拟器上测。


晕,这是真机的log


那如何获取总内存大小呢?谢谢...

#3


#4


引用 3 楼 zhq56030207 的回复:
多查查资料吧http://www.qiyeku.com/AdminExe/NewsShowTmp.Asp?Id=963181&2010-11-16%2019:23:02


请问你给的资料对这个问题有新的帮助吗?

你发的链接中

    static public long getAvailableInternalMemorySize() {   
        File path = Environment.getDataDirectory();   
        StatFs stat = new StatFs(path.getPath());   
        long blockSize = stat.getBlockSize();   
        long availableBlocks = stat.getAvailableBlocks();   
        return availableBlocks * blockSize;   
    }   
       
    static public long getTotalInternalMemorySize() {   
        File path = Environment.getDataDirectory();   
        StatFs stat = new StatFs(path.getPath());   
        long blockSize = stat.getBlockSize();   
        long totalBlocks = stat.getBlockCount();   
        return totalBlocks * blockSize;   
    }   
       
    static public long getAvailableExternalMemorySize() {   
        if(externalMemoryAvailable()) {   
            File path = Environment.getExternalStorageDirectory();   
            StatFs stat = new StatFs(path.getPath());   
            long blockSize = stat.getBlockSize();   
            long availableBlocks = stat.getAvailableBlocks();   
            return availableBlocks * blockSize;   
        } else {   
            return ERROR;   
        }   
    }   


这三个方法所显示的内存大小的方法和我发的代码是一样的


        // Environment:Data
        showEnvironment(Environment.getDataDirectory());
        // Environment:System
        showEnvironment(Environment.getRootDirectory());


我没期望也没权力要求懂的人必须来回帖子,但我希望回我帖子的人在回帖的时候已经明白了我的问题。

#5


已解决
adb shell下命令

cat /proc/meminfo


详细见:
http://blog.csdn.net/sodino/archive/2010/10/14/5941308.aspx

看来自己也晕了,问的问题之前已经有接触过了,现在才反应过来。算是温故知新吧。

#6


已解决的话,收垃圾来喽....