zoukankan      html  css  js  c++  java
  • 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的使用率,这里不再赘述。

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/2475209.html
Copyright © 2011-2022 走看看