您的位置:首页 > 移动开发 > Android开发

android系统—储存知识源码分析

2017-04-24 09:30 381 查看

1.存储相关名词:

RAM

Ramdom Access Memory 随机存取存储器

ROM

Read Only Memory

ROM image 只读存储器镜像

NAND Flash

flash内存的一种

2.OBB

OBB:Opaque Binary Blob

Android 2.3引入的OBB文件

一种隔离的文件系统

APK分离出的资源文件放在SD卡上,别的程序没有权限访问

可以通过mkobb.sh、obbtool 加my_secret_key生成obb文件

访问时也需要my_secret_key

3.USB连接模式

默认连接模式

persist.sys.usb.config

bicr mtp adb mass_storage

内置光盘 Built in CD ROM

MTK_BICR_SUPPORT

system/etc/iAmCdRom.iso

PTP Picture Transfer Protocol

MTP 媒体传输协议

MIDI

Musical Instrument Digital Interface

乐器数字接口

4.android服务总览



ServiceManager为系统服务管家

1、主要负责添加服务,获取服务,查找服务以及当某个服务意外终止时,对该服务的资源进行回收

2、所有的Service使用前都必须先在ServiceManager中进行注册

3、 ServiceManager的启动。

5.Android启动流程





init是第一个进程。

init进程挂载目录,

比如/sys、/dev、/proc,

二是运行init.rc脚本。

rc文件叫做Android初始化语言 由四大类型的声明组成

Actions(动作)、Commands(命令)

Services(服务)、Options(选项)

6.Dumpsys

服务: DiskStatsService

This service exists only as a “dumpsys” target which reports statistics about the status of the disk

Dumpsys:打印系统中指定服务的信息

“dumpsys diskstats” 内部存储设备的使用情况



frameworks\base\services\core\java\com\android\server\ DiskStatsService.java
frameworks/native/cmds/dumpsys/dumpsys.cpp


7.DeviceStorageMonitorService

DSMS:监测系统内部存储空间的状态

服务名:devicestoragemonitor

构造函数,

onstart

checkMemory函数

8.MountService



Client —— StorageManager

Proxy —— IMountServie.Stub.Proxy

Parcel ——对象序列化类,数据只有继承Parcelable才能进行RPC

Stub —— IMountService.Stub

Server —— MountService



在SystemServer中调用mSystemServiceManager.startService(MOUNT_SERVICE_CLASS)
实例化


9.Vold (Volume Daemon)

Vold:native进程,接收来自内核的外部设备消息,用于管理和控制Android平台外部存储设备,包括SD插拨、挂载、卸载、格式化等

Netlink

Linux系统中用户空间进程和Kernel进行通信的一种机制,用户空间进程可以接收来自Kernel的消息,同时也可以向Kernel发送一些控制命令

Uevent

和Linux的设备文件系统及设备模型有关,是sysfs向用户空间发送的消息。消息格式实际上是一串字符串。

10.存储大小显示不一致

区分标示容量、实际容量、可以容量

标示1G=1000Mb=1000*1000Kb=1000*1000*1000 字节

实际1G=1024Mb=1024*1024Kb=1024*1024*1024字节

总字节一致时,实际与标示的比值是1000/1024的三次方

数值约为0.9313

遇到的问题如:

总容量显示不是8G,

各存储项大小加起来不够8G

设置和文件管理器大小显示不一致

11.默认存储位置

Google标准接口

String path = Environment.getExternalStorageDirectory().getPath();

2、MTK接口

StorageManagerEx.getDefaultPath()

PROP_SD_DEFAULT_PATH = “persist.sys.sd.defaultpath“

3、通过getVolumeList获取路径

注意:权限、签名

android.permission.WRITE_EXTERNAL_STORAGE“

android.permission.WRITE_MEDIA_STORAG
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: