1. 总体架构

2. 流程概览

2.1 开启Vold

2.2 引导Uevent

2.3 处理事件

Vold - Volume Daemon存储类的守护进程,作为Android的一个本地服务,负责处理诸如SD、USB等存储类设备的插拔等事件。

1. 总体架构

Vold服务由volumeManager统一管控,它将具体任务分别分派给netlinkManager, commandListener, directVolume, Volume去完成。

Vold服务向下通过socket机制与底层驱动交互,向上通过JNI, intent, socket, doCommand等机制与Java Framework交互。

2 流程概览

2.1 开启服务

初始化Android系统时开启Vold本地服务,

Vold在/dev/block下创建vold文件夹,开启VolumeManager, NetlinkManager, CommandListener。

2.2 引导Uevent

NetlinkManager负责监听底层Linux上报的uevent事件。

系统的SocketListner统一管理所有socket事件。

NetlinkListner负责解析socket事件。

最后由onEvent()将vold事件交还给NetlinkManager处理。

2.3 处理Block和Switch事件

NetlinkManager调用VolumeManager中处理vold事件的类。

handleBlockEvent()完成SD的挂载和卸载,具体交由DirectVolume完成。

handleSwitchEvent()完成由USB实现的U盘的连接。

两者最后都是通过setBroadcast()将ResponsibleCode经过nativeDaemonConnector的socket监听机制,最终上传到MountService作统一规划。

MountService里的onEvent()得到解析后的事件,完成两大任务,

-> 发送命令doCommand()通过commandListener传递给volumeManager

-> 将事件信息广播给相关服务,供上层应用使用。

参考:http://blog.csdn.net/qianjin0703/article/details/6362389

更多相关文章

  1. tcping测试服务器TCP端口
  2. Android(安卓)手机 Google Play 商店“从服务器检索信息时出错 [
  3. Android(安卓)Widget点击事件
  4. Android(安卓)输入事件流程
  5. 11.GridView、ListView等的OnItemClick事件无法触发的解决方案。
  6. Android实现二维码扫描功能(三)-闪光灯控制
  7. Google GMS-Testing
  8. Android(安卓)5.0(Lollipop)事件输入系统(Input System)
  9. Android中的四大组件

随机推荐

  1. 实现敏捷框架的比较:Scrum 方法 vs 看板方
  2. centos7 系统自带的OpenJDK切换成的Oracl
  3. flink sql使用中的一个问题
  4. 让你的 Jenkins 更强壮的高可用实践
  5. 如何开始我们的 DevOps 转型之旅?
  6. Flink计算PV,UV的案例及问题分析
  7. 轻量化 Jenkins 最佳实践
  8. 浪尖刷过leetcode的题
  9. 计算文本算式,其实很简单
  10. Flink通过异步IO实现redis维表join