Android 读取硬件信息技巧

来源:互联网 发布:iphone看图软件 编辑:程序博客网 时间:2024/06/05 03:30
 

Android 读取硬件信息技巧

分类: Android 121人阅读 评论(0) 收藏 举报

Android 从本质上说是 Linux,因此可以把 Android 当作 Linux 来访问,从而达到访问系统信息的目的:

 

proc 文件系统

proc 文件系统是Linux内核开发人员为了减少系统调用的复杂性而引入的一种特殊文件系统。

有了这种文件系统,用户只需要像查看文本文件一样就能够读取内核中的各种数据,给开发人员和系统管理员带来很大的便利。

很多Linux常用命令都是依靠分析/proc目录下的文件来运行的,比如 ls,ps 等。

 

1、读取CPU和内存等信息。

分析 /proc/cpuinfo 这个文件,就能获得 CPU信息。

adb shell

# cat /proc/cpuinfo

 

分析 /proc/meminfo ,就能获得内存信息

adb shell

# cat /proc/meminfo
04    MemTotal:          94096 kB
05    MemFree:            1684 kB
06    Buffers:              16 kB
07    Cached:            27160 kB
08    SwapCached:            0 kB
09    Active:            35392 kB
10    Inactive:          44180 kB
11    Active(anon):      26540 kB
12    Inactive(anon):    28244 kB
13    Active(file):       8852 kB
14    Inactive(file):    15936 kB
15    Unevictable:         280 kB
16    Mlocked:               0 kB
17    SwapTotal:             0 kB
18    SwapFree:              0 kB
19    Dirty:                 0 kB
20    Writeback:             0 kB
21    AnonPages:         52688 kB
22    Mapped:            17960 kB
23    Slab:               3816 kB
24    SReclaimable:        936 kB
25    SUnreclaim:         2880 kB
26    PageTables:         5260 kB
27    NFS_Unstable:          0 kB
28    Bounce:                0 kB
29    WritebackTmp:          0 kB
30    CommitLimit:       47048 kB
31    Committed_AS:    1483784 kB
32    VmallocTotal:     876544 kB
33    VmallocUsed:       15456 kB
34    VmallocChunk:     829444 kB

 

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 SDK 的 ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo) 也能获得当前可用内存的大小

 

// 下面是用Android SDK 的方法

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi); //mi.availMem; 当前系统的可用内存
return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 将获取的内存大小规格化

 

//下面是分析 /proc/meminfo 的方法:

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,内存大小规格化  }

 

你如果使用Linux,可以看到 /proc目录还有很多文件,你可以用 man proc 命令来学习 proc 文件系统。

原创粉丝点击