android fm流程,Android_FM分析.doc

Android_FM分析

FM Document

李耀宗

1.??????Start FM

根据FM的AndroidManifest.xml的定义,FmServiceManager作为application被首先启动,它初始化过程中先去register FmReceiver,如:

registerService(FmReceiver.SERVICE_NAME, new FmReceiverService(mSystemContext));

这里只提供了这一个local Android service,由FMServiceConfig配置。FmReceiverService初始化之后被包装成FmServiceWrapper类型放在容器中,初始状态为stoped。同时BTLD library被加载并且FMInitNative被调用,Native被初始化。(Native初始化过程?略)

????static {

????????//System.loadLibrary("btld");

????????System.loadLibrary("fmservice");

????????classFmInitNative();

????????} /* BTLD配置在init.qcom.rc中启动?*/

随后FmRadio被初始化,它从系统获取NotificationManager、TelephonyManager、AudioManager服务,以监听相关的状态或者进行相应的操作。然后通过getProxy()函数调用初始化FmReceiver,并将FmReceiverEventHandler对象传递给它。并进行一些其他的初始化工作。

2.??????FM类基本结构

FmServiceManager?--> Application

??|--> FmServiceWrapper

????????|--> FmReceiverService

FmReceiverService?--> BaseService --> IbtService?(均由FM模块实现)

??|--> CallbackList?(实现回调机制,本应为Binder跨进程)

??|--> Handler?(实现Msg处理)

FmReceiver

??|--> FmReceiverCallback --> IFmReceiverCallback.Stub?(未使用)

??|--> LocalFmReceiverCallback --> IfmReceiverCallback (aidl)

????????|--> Handler?(引用,此处使用多线程进行消息处理)

????????|--> HandlerCreatorImpl --> IhandlerCreator

??????????????|--> Handler

????????????????????|--> IfmReceiverEventHandler?(引用指向FmReceiver. mHandler,如此复杂的结构只是为了使用多线程处理message)

??|--> IfmReceiverEventHandler?(引用来自FmRadio)

??|--> LocalFmReceiverServiceStub --> IfmReceiverService (aidl)

????????|--> FmReceiverService?(引用指向FmServiceManager. FmReceiverService,本应为跨进程通信,这里实现为进程内函数调用,通过getProxy函数获取引用)

FmRadio?(实现了IbluetoothProxyCallback接口,为获取FmReceiver引用)

??|--> FmReceiver?(引用从onProxyAvailable()函数中获取)

??|--> Handler

??|--> FmReceiverEventHandler --> IfmReceiverEventHandler?(配合Handler对来自FmReceiver的事件进行处理)

FM的代码中实现了许多原Android框架的基类,如:BaseProxy、BaseService等,都是为了实现本地调用。FM的代码中还有一些其他的类,例如:FmRadioSettings、FmReceiveView等等。

初始化过程:

set Volume函数调用的逻辑如下:

FmRadio的dispatchKeyEvent()函数接收到KEYCODE_VOLUME_UP事件,调用FmReceiver的setFMVolume()函数,FmReceiverService实现为本地类后,就直接调用它的se

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值