在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行,并进行简单的字符串处理即可。
下面直接给出详细步骤,大家可以根据实际情况进行相应扩展。
第一步:新建一个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的使用率,这里不再赘述。
分享到:
相关推荐
Android 获取手机总内存和可用内存信息,博客附adb方式 https://blog.csdn.net/qq_31939617/article/details/80272759
Android开发获取手机总内存和可用内存定义.pdf
主要介绍了Android系统检测程序内存占用各种方法,并对内存信息的详细介绍,需要的朋友可以参考下
可以获取系统的内存和可用内存,cpu的实时使用率
Android获取储存信息以及内存信息可以用adb命令查看。 adb查看系统内存信息以及储存信息: 命令:adb shell cat /proc/meminfo 代码: private static final String FILENAME_PROC_MEMINFO = /proc/meminfo; /*...
Unity调用Android查看内存信息,在android上面运行时候可查看fps,系统内存大小,系统可用内存大小,当前App占用内存
Due to undocumented changes made by Google, on Android 7.0 CPU usage information for processes others than the own AnotherMonitor one will not be available (not even with root access). Rest of the app...
下面小编就为大家带来一篇android 获取手机内存及SD卡内存可用空间的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Unity调用Android查看当前app占用内存信息,系统可用内存大小及系统内存大小,FPS的显示,帮助对游戏进行性能优化
android可用内存的阀值教程,让你更了解android的内存管理参照.pdf
本篇文章主要介绍了Android获取App内存使用情况的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法,涉及Android针对SD卡操作的常见技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本篇文章对用Android获取系统cpu信息,内存,版本,电量等信息的方法进行了详细的分析介绍。需要的朋友参考下
内部存储空间获取总大小和可用大小; sdcard存储空间获取总大小和可用大小; 新名词记录{StatFs:描述文件系统信息的类} 概览 在开发中,我们或多或少都会用到存储空间进行存储数据。移动设备上可以有两种的存储方式...
SDCard存储卡在 Android 手机上是可以随时插拔的,每次的动作都会引起Android系统ACTION_BROADCAST,本例子将计算出 SDCard 的剩余容量和总容量。供测试的sd卡中存了两首歌和一个30M的文件,现在检测剩余的空间正好...
获取可用内存大小 获取系统版本 安装客户端 获取FilesDir目录 获取SD卡路径 获取缓存目录 获取APP版本号 获取当前网络类型 是否是wifi连接状态 获取当前网络状态信息 获取wifi热点 获取屏幕宽度(分辨率PX) 获取屏幕...
手机信息:手机屏幕宽和高、当前可用内存大小、总内存大小、IMEI号、IESI号、手机型号、手机品牌、手机MacAdd、CPU型号、CPU频率 开门见山,以下是Java代码,XML只有一个TextView显示信息。 package ...