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: LowFreeHighFree的总和,被系统留着未使用的内存。

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+SReclaimableSlab)。

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

NFS_Unstable:不稳定页表的大小。

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

下面直接给出详细步骤,大家可以根据实际情况进行相应扩展。
第一步:新建一个Android工程,命名为ReadSystemMemory,如下图所示。

第二步:修改在layout目录下的main.xml文件,代码如下:

view plaincopy to clipboardprint?

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns: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>

第三步:完善ReadSystemMemory类,代码如下:

view plaincopy to clipboardprint?

packagecom.figo.readsyememory;

importandroid.app.Activity;

importandroid.os.Bundle;

importjava.io.BufferedReader;

importjava.io.FileReader;

importjava.io.IOException;

importandroid.app.ActivityManager;

importandroid.app.ActivityManager.MemoryInfo;

importandroid.content.Context;

importandroid.text.format.Formatter;

importandroid.util.Log;

importandroid.widget.TextView;

publicclassReadSystemMemoryextendsActivity{

TextViewtv=null;

privateStringgetAvailMemory(){//获取android当前可用内存大小

ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

MemoryInfomi=newMemoryInfo();

am.getMemoryInfo(mi);

//mi.availMem;当前系统的可用内存

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

}

privateStringgetTotalMemory(){

Stringstr1="/proc/meminfo";//系统内存信息文件

Stringstr2;

String[]arrayOfString;

longinitial_memory=0;

try{

FileReaderlocalFileReader=newFileReader(str1);

BufferedReaderlocalBufferedReader=newBufferedReader(

localFileReader,8192);

str2=localBufferedReader.readLine();//读取meminfo第一行,系统总内存大小

arrayOfString=str2.split("\\s+");

for(Stringnum:arrayOfString){

Log.i(str2,num+"\t");

}

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

localBufferedReader.close();

}catch(IOExceptione){

}

returnFormatter.formatFileSize(getBaseContext(),initial_memory);//Byte转换为KB或者MB,内存大小规格化

}

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

tv=(TextView)findViewById(R.id.system_memory);

tv.setText("手机总内存:"+this.getTotalMemory()+","+"可用内存:"

+this.getAvailMemory());

}

}

第四步:运行该工程,结果如下:

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

更多相关文章

  1. Android中显示动画的GIF-Movie类解决方案
  2. Android(安卓)Studio文件分组插件
  3. Android查看Apk签名
  4. 自定义android的tab样式 《》
  5. 一些安卓的基本权限 清单配置文件
  6. 如何将编译好的apk文件加入Android系统?
  7. 原生 iOS 项目集成 React Native
  8. 我的第一个Android应用
  9. Android(安卓)Studio使用教程(一)

随机推荐

  1. 111
  2. Android版本下载以及切换
  3. android创建自定义控件
  4. API 23 widget.ProgressBar——属性分析
  5. EditText自定义边框
  6. Android底部菜单栏的实现
  7. Android中获取手机支持的硬件解码器类型
  8. android:Kotlin Java Kotlin android Kot
  9. API 23 widget.ImageView——属性分析
  10. Android 项目基础之XML