`

Android 获取手机总内存和可用内存等信息

 
阅读更多

在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?
通过读取文件"/proc/meminfo"的信息能够获取手机Memory的总量,而通过ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo)方法可以获取当前的可用Memory量。
"/proc/meminfo"文件记录了android手机的一些内存信息,在命令行窗口里输入"adb shell",进入shell环境,输入"cat /proc/meminfo"即可在命令行里显示meminfo文件的内容,具体如下所示。

C:\Users\Figo>adb shell
# cat /proc/meminfo
cat /proc/meminfo
MemTotal: 94096 kB
MemFree: 1684 kB
Buffers: 16 kB
Cached: 27160 kB
SwapCached: 0 kB
Active: 35392 kB
Inactive: 44180 kB
Active(anon): 26540 kB
Inactive(anon): 28244 kB
Active(file): 8852 kB
Inactive(file): 15936 kB
Unevictable: 280 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 52688 kB
Mapped: 17960 kB
Slab: 3816 kB
SReclaimable: 936 kB
SUnreclaim: 2880 kB
PageTables: 5260 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 47048 kB
Committed_AS: 1483784 kB
VmallocTotal: 876544 kB
VmallocUsed: 15456 kB
VmallocChunk: 829444 kB
#

下面先对"/proc/meminfo"文件里列出的字段进行粗略解释:

MemTotal: 所有可用RAM大小。

MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。

Buffers: 用来给文件做缓冲大小。

Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。

SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,用来在需要的时候很快的被替换而不需要再次打开I/O端口。

Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。

Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。

SwapTotal: 交换空间的总大小。

SwapFree: 未被使用交换空间的大小。

Dirty: 等待被写回到磁盘的内存大小。

Writeback: 正在被写回到磁盘的内存大小。

AnonPages:未映射页的内存大小。

Mapped: 设备和文件等映射的大小。

Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。

SReclaimable:可收回Slab的大小。

SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。

PageTables:管理内存分页页面的索引表的大小。

NFS_Unstable:不稳定页表的大小。

要获取android手机总内存大小,只需读取"/proc/meminfo"文件的第1行,并进行简单的字符串处理即可。

===========================================================================

下面直接给出详细步骤,大家可以根据实际情况进行相应扩展。

1.新建项目,修改main.xml

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent" >
<TextView
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:textStyle
="bold"
android:id
="@+id/system_memory" />
</LinearLayout>

2.完善ReadSystemMemory.java类

ReadSystemMemory.java

package com.figo.readsyememory;

import android.app.Activity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.content.Context;
import android.text.format.Formatter;
import android.util.Log;
import android.widget.TextView;

public class ReadSystemMemory extends Activity {

TextView tv
= null;

private String getAvailMemory() {// 获取android当前可用内存大小

ActivityManager am
= (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi
= new MemoryInfo();
am.getMemoryInfo(mi);
//mi.availMem; 当前系统的可用内存

return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化
}

private String getTotalMemory() {
String str1
= "/proc/meminfo";// 系统内存信息文件
String str2;
String[] arrayOfString;
long initial_memory = 0;

try {
FileReader localFileReader
= new FileReader(str1);
BufferedReader localBufferedReader
= new BufferedReader(
localFileReader,
8192);
str2
= localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小

arrayOfString
= str2.split("\\s+");
for (String num : arrayOfString) {
Log.i(str2, num
+ "\t");
}

initial_memory
= Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
localBufferedReader.close();

}
catch (IOException e) {
}
return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv
= (TextView) findViewById(R.id.system_memory);
tv.setText(
"手机总内存: " + this.getTotalMemory() + ", " + "可用内存: "
+ this.getAvailMemory());
}
}

3.运行结果

大功告成,顺利读取android手机的总内存和当前的可用内存。这里只是抛砖引玉,大家可以举一反三,进行扩展。当然我们还可以通过读取"/proc/cupinfo"来获取android手机的CPU参数,通过读取"/proc/stat"文件来计算CPU的使用率,这里不再赘述。

分享到:
评论

相关推荐

    Android 获取手机总内存和可用内存信息,博客附adb方式

    在Android系统中,获取手机的总内存和可用内存信息是开发者和普通用户都可能需要的操作。这涉及到系统层面的信息查询,通常需要通过编程接口(API)或者使用Android Debug Bridge(ADB)工具来实现。以下是对这个...

    Android开发获取手机总内存和可用内存定义.pdf

    ### Android开发中获取手机总内存和可用内存的方法 在Android应用开发过程中,有时我们需要了解设备的硬件信息,例如手机的总内存(RAM)以及当前可用的内存大小。这对于优化应用程序性能、合理分配资源等方面有着...

    android开发中获取手机内存信息的方式

    在 Android 开发中,有时候我们想获取手机的一些硬件信息,比如 android 手机的总内存和可用内存大小。下面我们将详细介绍如何获取手机内存信息。 获取手机总内存大小 要获取 android 手机总内存大小,可以通过...

    Android获取cpu,内存,磁盘使用率信息

    `ActivityManager.MemoryInfo`类提供了关于设备内存的详细信息,包括总内存、可用内存、低内存状态等。通过`ActivityManager.getMemoryInfo()`获取这些数据。此外,还可以通过`/proc/meminfo`文件来获取更底层的内存...

    Android获取当前应用分配的最大内存和目前使用内存的方法

    在Android里,程序内存被分为2部分:native和dalvik,dalvik就是我们普通的Java使用内存,分析堆栈的时候使用的内存。我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制. Android ...

    Android中获取系统内存信息以及进程信息

    在本篇文章中,我们将深入探讨如何利用`ActivityManager`获取内存信息和进程信息。 首先,我们来看如何获取系统内存信息。Android提供了一个名为`ActivityManager.RunningAppProcessInfo`的类,其中包含了关于当前...

    android获取手机内存大小

    总的来说,Android提供了丰富的API来获取和管理内存信息。开发者需要根据实际需求选择合适的方法,合理地利用这些信息,优化应用性能,提高用户体验。通过持续学习和实践,我们可以更好地理解和掌握Android内存管理...

    Unity调用Android查看内存信息2

    本文将深入探讨如何利用Unity调用Android原生API来查看内存信息,包括FPS(帧率)、系统总内存、系统可用内存以及Unity应用自身所占用的内存。这对于监控和优化游戏性能至关重要。 首先,我们关注的是"Unity调用...

    Android 如何获取手机总内存和可用内存等信息

    在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。 这个该如何实现呢? 通过读取文件“/proc/meminfo”的信息能够获取手机Memory的总量,而通过ActivityManager.get...

    android获取手机信息

    Android 操作系统提供了多种方式来获取手机信息,包括获取安装的应用信息、手机可用内存和总内存、手机 CPU 信息等。在本文中,我们将详细介绍如何使用 Java 代码来获取这些信息。 获取安装的应用信息 在 Android...

    android 获取手机内存及 内存可用空间的方法

    首先,Android系统提供了一个名为`StatFs`的类,该类用于获取文件系统的统计信息,包括总块数、自由块数以及可分配块数等。这些信息可以帮助我们计算出内存的使用情况。 1. **获取手机内存可用大小** 在Android中...

    Android获取系统储存以及内存信息的方法(二)

    Android获取储存信息以及内存信息可以用adb命令查看。 adb查看系统内存信息以及储存信息: 命令:adb shell cat /proc/meminfo 代码: private static final String FILENAME_PROC_MEMINFO = /proc/meminfo; /*...

    Unity调用Android查看内存信息1

    这个类会包含调用Android系统API的方法,用于获取内存信息和FPS。 ```java // ShowAppBaseInfo.java package com.example.showappbaseinfo; import android.app.Activity; import android.os.Debug; import ...

    android 获取cpu使用率, 内存 实时数据

    内存则分为总内存和可用内存,总内存是设备物理内存的总量,而可用内存则是当前系统可分配给应用使用的内存。 在Android中,获取CPU使用率通常需要读取 `/proc/stat` 文件,该文件包含了系统运行的各种统计信息。...

    获取android手机内存

    在Android系统中,获取手机内存信息是开发过程中的一项常见任务,这有助于监控设备性能或优化应用程序资源使用。本文将深入探讨如何在Android中获取并显示内存信息,主要围绕以下几个方面展开: 1. **Android内存...

    获取android手机CPU\内存\屏幕密度等硬件信息

    该类提供了关于系统内存状态的各种属性,例如总内存、可用内存等。我们可以通过`ActivityManager`服务获取这些信息: ```java ActivityManager activityManager = (ActivityManager) context.getSystemService...

    android 7.1 获取各个应用的各种内存信息的app demo

    在Android系统中,获取应用程序的内存信息是进行性能分析、优化和故障排查的重要步骤。针对Android 7.1,这个"android 7.1 获取各个应用的各种内存信息的app demo"是一个示例项目,旨在教开发者如何在不依赖外部开源...

    android获取SDcard内存空间

    总结一下,本篇内容涵盖了Android获取SD卡内存空间的基本方法,包括获取存储状态、总空间、可用空间和已用空间,以及如何处理不同的Android版本和权限问题。这些知识对于任何涉及存储管理的Android应用都是必不可少...

Global site tag (gtag.js) - Google Analytics