StorageSize获取代码逻辑:
FileUtils.roundStorageSize(Environment.getDataDirectory().getTotalSpace() + Environment.getRootDirectory().getTotalSpace())
其中:
getDateDirectort().getTotalSpace(): 获取userdata总大小
getRootDirectory().getTotalSpace()):获取跟文件系统大小
具体size可以在设备启动后在adb shell中通过df -h获取查看:
console:/ # df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.7G 1.7M 1.7G 1% /dev
tmpfs 1.7G 0 1.7G 0% /mnt
/dev/block/sda11 11M 164K 11M 2% /metadata
/dev/block/dm-4 931M 929M 2.8M 100% /
/dev/block/dm-5 795M 793M 2.4M 100% /system_ext
/dev/block/dm-6 599M 598M 1.8M 100% /vendor
/dev/block/dm-7 298M 297M 916K 100% /product
tmpfs 1.7G 4.0K 1.7G 1% /apex
tmpfs 1.7G 132K 1.7G 1% /linkerconfig
/dev/block/loop0 42M 42M 32K 100% /apex/com.android.vndk.v34@1
/dev/block/loop1 108M 108M 28K 100% /apex/com.android.vndk.v30@1
/dev/block/loop4 38M 38M 32K 100% /apex/com.android.i18n@1
/dev/block/loop2 10M 10M 40K 100% /apex/com.android.runtime@1
/dev/block/loop3 764K 736K 28K 97% /apex/com.android.tzdata@340090000
/dev/block/sda2 27M 1.0M 26M 4% /mnt/vendor/persist
/dev/block/sde4 180M 94M 85M 53% /vendor/firmware_mnt
/dev/block/sde9 27M 15M 13M 55% /vendor/dsp
/dev/block/sde5 64M 944K 63M 2% /vendor/bt_firmware
/dev/block/dm-43 41G 1.2G 40G 4% /data
tmpfs 1.7G 0 1.7G 0% /data_mirror
可以看到userdata=41GB,跟文件系统931MB。总和41.9GB。
FileUtils.roundStorageSize接口是针对结果做一次2次幂取整的操作,具体代码逻辑如下:
public static long roundStorageSize(long size) {
long val = 1;
long kiloPow = 1;
long kibiPow = 1;
while ((val * kibiPow) < size) {
val <<= 1;
if (val > 512) {
val = 1;
kibiPow *= 1024;
kiloPow *= 1000;
}
}
return val * kiloPow;
}
综合41.9GB通过计算之后的结果就是64GB,所以Android Steetings的Storage total size就会显示64GB