android usb挂载分析---FrameWork层处理收到的vold消息
来源:互联网 发布:python pandas 十分钟 编辑:程序博客网 时间:2024/05/16 19:04
vold模块收到内核消息后,通过前面建立的socket通信各上去发送相应的消息,我们可以看到主要发了两类消息:
1、DirectVolume::handleDiskAdded以及handlePartitionAdded都调用setState发送了一条VolumeStateChange消息。
2、handleDiskAdded中还发送了 VolumeDiskInserted消息。
我们先看下FrameWork层的消息处理流程:
这里的消息处理还算比较简单,主要只要处理VolumeDiskInserted消息,另外两条消息收到后都被忽略了,
我们看下VolumeDiskInserted的处理,首先阻塞在listenToSocket等待vold消息的到来:
while (true) { int count = inputStream.read(buffer, start, BUFFER_SIZE - start); if (count < 0) break; 。 。 。try { if (!mCallbacks.onEvent(code, event, tokens)) { Slog.w(TAG, String.format( "Unhandled event (%s)", event)); } } 。。。收到消息后,调用onEvent函数
onEvent的函数实现在MountService中
public boolean onEvent(int code, String raw, String[] cooked) { Intent in = null; . . . if (code == VoldResponseCode.VolumeDiskInserted) { new Thread() { public void run() { try { int rc; if ((rc = doMountVolume(path)) != StorageResultCode.OperationSucceeded) { Slog.w(TAG, String.format("Insertion mount failed (%d)", rc)); } } catch (Exception ex) { Slog.w(TAG, "Failed to mount media on insertion", ex); } } }.start();这里的消息为VolumeDiskInserted,new 一个Thread并start,在run函数中调用doMountVolume函数向vold层发送挂载命令:private int doMountVolume(String path) { int rc = StorageResultCode.OperationSucceeded; if (DEBUG_EVENTS) Slog.i(TAG, "doMountVolume: Mouting " + path); try { mConnector.doCommand(String.format("volume mount %s", path)); } . . .}
这里调用doCommand并以volume mount path为参数,我们看下doCommand:public synchronized ArrayList<String> doCommand(String cmd) throws NativeDaemonConnectorException { sendCommand(cmd); . . . }继续看sendCommand:private void sendCommand(String command, String argument) throws NativeDaemonConnectorException { . 。 . try { mOutputStream.write(builder.toString().getBytes()); } catch (IOException ex) { Slog.e(TAG, "IOException in sendCommand", ex); } }调用write函数把消息发送到vold层,这样FrameWork层就把挂载命令下发到了vold层。
- android usb挂载分析---FrameWork层处理收到的vold消息
- android usb挂载分析---FrameWork层处理vold消息
- android usb挂载分析---vold处理FrameWork层发出的消息
- android usb挂载分析---vold处理FrameWork层发出的消息
- android usb挂载分析---vold处理内核消息
- android usb挂载分析---vold处理内核消息
- android usb挂载分析---vold处理内核消息
- android usb挂载分析----vold启动
- android usb挂载分析----vold启动
- android usb挂载分析----vold启动
- android usb挂载分析----vold启动
- Android2.2 Vold 分析-(四)---Vold 消息接收及挂载/卸载处理部分分析
- Android2.2 Vold 分析-(四)---Vold 消息接收及挂载/卸载处理部分分析
- Android Framework分析 ---- 1消息处理机制 java层
- Android2.2 Vold 消息接收及挂载/卸载处理部分分析
- Android4.4----Vold挂载管理分析USB挂载(二)
- Android4.4----Vold挂载管理分析USB挂载(三)
- Android4.4----Vold挂载管理分析USB挂载(四)
- B/S模型的三个层次
- 初始化的顺序
- 在powerbuilder中使下拉列表框可以和数据关联
- awk 笔记之六 patterns, actions, variables 详细介绍
- const与指针的应用
- android usb挂载分析---FrameWork层处理收到的vold消息
- 从Web站点读取Flash动画演播的PB6.5编程
- Eclipse使用小结
- 记录的网址
- 编译原理——变量声明语句(十二)
- ibatis2.x与mybatis(ibatis3.x)的比较
- 黑马程序员_File类代码练习(列出文件目录)
- jquery-animate-imagescroll 图片滚动
- 编译原理——变量声明语句(十三)