安卓应用开发实战:[12]读取内存使用情况
1、通过查看安卓系统的设置程序功能,可以设想我们可以通过分析安卓系统的设置程序的源代码,得到获取存储设备信息部分的主要代码。
2、为了简单起见,我设计了如图所示的简单布局文件,xml文件如下:<LinearLayout xmlns:android="稆糨孝汶;http://schemas.android.com/apk/res/android"android:background="#000000"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:padding="5dp" ><TableRowandroid:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="SD卡总空间:"android:textSize="20dp"android:textColor="#ffffff" /><TextViewandroid:id="@+id/tvSdTotalSize"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="100MB"android:textSize="20dp"android:textColor="#ffffff"/></TableRow><TableRowandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="SD卡剩余空间:"android:textSize="20dp"android:textColor="#ffffff" /><TextViewandroid:id="@+id/tvSdAvailSize"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="100MB"android:textSize="20dp"android:textColor="#ffffff"/></TableRow></LinearLayout>
3、主要代码则下面所示:pu水瑞侮瑜blic class MainActivity extends Activit烤恤鹇灭y {TextView tvSdTotalSize = null;TextView tvSdAvailSeze = null;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //渲染界面 setContentView(R.layout.activity_main); //寻找控件 tvSdTotalSize = (TextView) this.findViewById(R.id.tvSdTotalSize); tvSdAvailSeze = (TextView) this.findViewById(R.id.tvSdAvailSize); //获得SD卡容量和剩余量 final StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); final long blockSize = stat.getBlockSize(); final long totalBlocks = stat.getBlockCount(); final long availableBlocks = stat.getAvailableBlocks(); long mTotalSize = totalBlocks * blockSize; long mAvailSize = availableBlocks * blockSize; String mAvailSize2String = Formatter.formatFileSize(getApplicationContext(), mAvailSize); String mTotalSize2String = Formatter.formatFileSize(getApplicationContext(), mTotalSize); //显示 tvSdTotalSize.setText(mTotalSize2String); tvSdAvailSeze.setText(mAvailSize2String);}}
4、StatFs类用于获得存储设备的文件系统的空间信息,new对象时候要求传入设备路径信息,所以用了Environment.getExternalStorageDirectory().getPath()方法获得SD卡的路径Environment用于获得手机环境信息。要获得其他存储设备的空间信息,修改这一句就可以了。
5、blockSize:块大小,totalBlocks:总共要多少块,availableBlocks:剩余多少块。以存储块来获得内存信息,stat.getBlockSize()方法获得块大小,stat.getBlockCount()和stat.getAvailableBlocks()的返回值则是以块为单位的,所以要乘以块大小才得到以字节为单位的内存大小。
6、Formatter.formatFileSize()这个方法可以把以字节为单位的long型值自动转换单位,并用字符串表示,比如Formatter.formatFileSize(getApplicationContext(), mAvailSize),当mAvailSize=100*1024*1024,则,返回的字符串为“100MB”。