2016-03-28 14:38:32 556浏览
SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发应用实战中,我们如何能获取SD卡的内存容量呢?
(1)首先,要获取SD卡上面的信息,必须先对SD卡有访问的权限,因此第一件事就是需要添加访问扩展设备的权限。
(2)然后需要判断手机上面SD卡是否插好,如果有SD卡的情况下才可以访问得到并获取到它的相关信息,当然以下这个语句需要用if做判断。
Android培训Android开发应用实战关于SD卡的优化
SD卡Android开发基础知识,主要是指图片加载优化以及分区优化。
(1)加载优化
Android的图片浏览器等多媒体应用可以加载整个SD卡内的所有图像,在加载前会把数据做成数据库,不用每次扫描,这大大加快了启动速度。事实上扫描操作是通过MediaScanner来实现的,目前支持的文件类型在MediaFile.java中定义。主要包括音频、MIDI、视频、图片、播放列表等。MediaScannerService服务的启动仅在收到如下权限后才会启动。
当然,在SD卡容量较大且文件较多时,MediaScannerService服务将会运行一段不短的时间,这对电池的持续能力会造成一定的影响,尤其是在电池技术始终不能有显著突破的前提下。
(2)分区优化
在将SD卡分区时,通常把第一分区的簇的大小设置为16k或者更大之后,都会得到更高的PC测试得分,而且手机也会增加流畅度。这是因为fat/fat32/vfat系统采用扇区+簇的方式来存储文件,一个扇区一般是512字节,一个簇就是一组扇区的集合。在默认状态下,4G以上的fat32分区应该是每簇16个扇区,也就是16×512=8K字节,这个字节对于Android的使用来说偏小了,当然也会提高些空间利用率。通过调大簇的大小,例如调到64个扇区(32K),可以提高大文件的存取效率。假设一个文件的大小是1024K,如果是8K的簇则最坏情况需要1024/8=128次IO。如果是32K的簇,则最坏情况只需要1024/32=32次IO,当然实际的IO次数可能比这些都少,因为操作系统有自己的优化方法,会尽量多读一些进来,最坏情况指的是1024K的数据真的被分别存在128个互不相邻的簇上,这样就是真的128次IO了。因此更大的簇对于大文件是有非常好的优化效果的,现在我们日常用的文件其实大部分都大于1024K了,比如一个MP3至少也要3M才算可听,而导航数据就更大了。因此尽量使用更大的簇是很有必要的。
所以在优化分区时,建议在格式化SD卡第一分区(fat32)的时候设置簇大小为32K,其实最高可以到64K,但是64K是fat32设计的极限,从软件角度来说在极限状态运行是不可靠的。因此使用较低一档的大小,格式化之后把数据复制回去。
为什么提高了fat32分区的效率就会提高手机的整体效率呢?这是因为这两个分区是在一个硬件上,如果fat32占用的IO负载大,则Ext分区分到的IO带宽自然就小了,而Android手机在第一次运行的时候其实是非常频繁地访问fat32分区的,因为“MediaScaner”在做数据搜集扫描工作时,为Android特有的手机全局搜索准备数据。因此,对fat32的优化可以提高整个手机的运行效率。当然我们可以等Media Scaner扫描完后再用手机,这样会很流畅,那时候手机流畅度就跟fat32是否优化无关了。