简单剖析Android 2.3 SD卡挂载流程<2>

    作者:课课家教育更新于: 2019-04-02 23:39:30

        智能机更新换代的速度比我们换衣服还要快一些,还没好好的享受最新版本的手机带来的乐趣,下一个最新版本也快发布了,但很多都是在改良优化方面下功夫,其底料还是原来的配方。现在我们还是简单讲讲Android 2.3 SD卡挂载流程吧。

    简单剖析Android 2.3 SD卡挂载流程_Android 2.3_Android开发_Android学习_课课家

           在简单剖析Android 2.3 SD卡挂载流程<1>中,我们主要简单的介绍了SD卡的挂载流程。包括了从内核层到用户层事件消息的传递,以及Vold的简介。本文将继续介绍SD卡的挂载,但文中并不会涉及代码的详细分析,因为这部分网上已有资料,我会在文章结尾贴出来供大家参考。本文主要目的是一方面对自己学习这一部分的总结,另一方面希望大家能够指出文中理解错误的地方。

      1.SD卡挂载流程图

              SD卡的挂载流程图如下:

      绿色箭头:表示插入SD卡后事件传递以及SD卡挂载

      红色箭头:表示挂载成功后的消息传递流程

      黄色箭头:表示MountService发出挂载/卸载SD卡的命令

      大家可能对图中突然出现的这么多的名称感到奇怪,这些都是在Android 2.3 源码中可以找到的,接下来我会为大家一一解释这些类的作用。

      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 系统中各个文件的作用了以及一些基本的信息,我们后续还会继续补充。

课课家教育

未登录