Android系统之SD卡分析二
来源:互联网 发布:联合国创意城市网络 编辑:程序博客网 时间:2024/05/16 06:40
1.SD卡挂载流程图
SD卡的挂载流程图如下:
绿色箭头:表示插入SD卡后事件传递以及SD卡挂载
红色箭头:表示挂载成功后的消息传递流程
黄色箭头:表示MountService发出挂载/卸载SD卡的命令
大家可能对图中突然出现的这么多的名称感到奇怪,这些都是在Android 源码中可以找到的,接下来我会为大家一一解释这些类的作用.
2.各个文件的主要作用
(1)Kernel:这个是系统内核啦。不是我要分析的文件,本文涉及内容不是内核级的哦!(努力学习中...)
(2)NetlinkManager:全称是NetlinkManager.cpp位于Android 2.3源码位置/system/vold/NetlinkManager.cpp。该类的主要通过引用NetlinkHandler类中的onEvent()方法来接收来自内核的事件消息,NetlinkHandler位于/system/vold/NetlinkHandler.cpp。
(3)VolumeManager:全称是VolumeManager.cpp位于Android 2.3源码位置/system/vold/VolumeManager.cpp。该类的主要作用是接收经过NetlinkManager处理过后的事件消息。因为我们这里是SD卡的挂载,因此经过NetlinkManager处理过后的消息会分为五种,分别是:block,switch,usb_composite,battery,power_supply。这里SD卡挂载的事件是block。
(4)DirectVolume:位于/system/vold/DirectVolume.cpp。该类的是一个工具类,主要负责对传入的事件进行进一步的处理,block事件又可以分为:Add,Removed,Change,Noaction这四种。后文通过介绍Add事件展开。
(5)Volume:Volume.cpp位于/system/vold/Volume.cpp,该类是负责SD卡挂载的主要类。Volume.cpp主要负责检查SD卡格式,以及对复合要求的SD卡进行挂载,并通过Socket将消息SD卡挂载的消息传递给NativeDaemonConnector。
(6)NativeDaemonConnector:该类位于frameworks/base/services/java/com.android.server/NativeDaemonConnector.java。该类用于接收来自Volume.cpp 发来的SD卡挂载消息并向上传递。
(7)MountService:位于frameworks/base/services/java/com.android.server/MountService.java。MountService是一个服务类,该服务是系统服务,提供对外部存储设备的管理、查询等。在外部存储设备状态发生变化的时候,该类会发出相应的通知给上层应用。在Android系统中这是一个非常重要的类。
(8)StorageManaer:位于frameworks/base/core/java/andriod/os/storage/StorageManager.java。在该类的说明中有提到,该类是系统存储服务的接口。在系统设置中,有Storage相关项,同时Setting也注册了该类的监听器。而StorageManager又将自己的监听器注册到了MountService中,因此该类主要用于上层应用获取SD卡状态。
通过上文对各个文件的作用简介,以及整个SD卡的挂载流程图可以知道,Android 系统是如何从底层获取SD卡挂载信息的。
- Android系统之SD卡分析二
- Android系统之SD卡分析一
- Android系统之SD卡分析三
- SD卡分析二
- SD卡分析二
- SD卡分析二
- Mobile的SD卡升级系统之二:热升级
- Mobile的SD卡升级系统之二:热升级
- SD卡驱动分析(二)
- SD卡驱动分析(二)
- SD卡驱动分析二
- Android-vold源码分析之挂载SD卡(8)
- Android-vold源码分析之卸载SD卡(9)
- Android-vold源码分析之格式化SD卡(10)
- Android-vold源码分析之挂载SD卡(8)
- Android-vold源码分析之卸载SD卡(9)
- Android-vold源码分析之格式化SD卡(10)
- Android-vold源码分析之卸载SD卡
- HDU Least Common Multiple
- Unity3D 5 官方教程:标准着色器:内容和环境;金属与镜面工作流
- TortoiseSVN 图文使用教程
- UVA10020用最少的线段去覆盖给定的线段
- leetcode:Integer to Roman 【Java】
- Android系统之SD卡分析二
- head first 设计模式学习之策略模式
- javascript正则函数
- python中单元测试doctest | unittest
- iOS动画 过渡/转场动画的简单应用
- centos更换163网易源
- 设计模式(三)
- BestCoder Round #75 1001模拟
- java day02 交换数据