对Android源码分析总结

移动开发 Android
也许大家对与Android源码还不是很了解,看完本文后对您一定会大有帮助,下文除了学习Android源码基本性质外还对Android源码的编程技巧给予说明。

Android中进行处理Android源码中,hardware/ril目录中包含着Android的telephony源码,下面就由我向大家介绍这些目录其中包含了三个子目录,下面是对三个子目录进行具体的分析说明。

一、目录hardware/ril/include分析:

只有一个头文件ril.h包含在此目录下。ril.h中定义了76个如下类型的宏:这些宏代表着客户进程可以向Android源码telephony发送的命令,包括SIM卡相关的功能,打电话,发短信,网络信号查询等。好像没有操作地址本的功能?

二、目录hardware/ril/libril分析。本目录下代码负责与客户进程进行交互。在接收客户进程命令后,调用相应函数进行处理,然后将命令响应结果传回客户进程。在收到来自网络端的事件后,也传给客户进程。

文件ril_commands.h:列出了telephony可以接收的命令;每个命令对应的处理函数;以及命令响应的处理函数。 文件ril_unsol_commands.h:列出了telephony可以接收的事件类型;对每个事件的处理函数;

以及WAKE Type??? 文件ril_event.h/cpp:处理与事件源(端口,modem等)相关的功能。ril_event_loop监视所有注册的事件源,当某事件源有数据到来时,相应事件源的回调函数被触发(firePending -> ev->func())

listenCallback函数:当与客户进程连接建立时,此函数被调用。此函数接着调用processCommandsCallback处理来自客户进程的命令请求processCommandsCallback函数:具体处理来自客户进程的命令请求。

对每一个命令,ril_commands.h中都规定了对应的命令处理函数(dispatchXXX),processCommandsCallback会调用这个命令处理函数进行处理。dispatch系列函数:此函数接收来自客户进程的命令己相应参数,并调用onRequest进行处理。

RIL_onUnsolicitedResponse函数:将来自网络端的事件封装(通过调用responseXXX)后传给客户进程,RIL_onRequestComplete函数:将命令的最终响应结构封装(通过调用responseXXX)后传给客户进程。

response系列函数:对每一个命令,都规定了一个对应的response函数来处理命令的最终响应;对每一个网络端的事件,也规定了一个对应的 response函数来处理此事件。response函数可被onUnsolicitedResponse或者onRequestComplete调用。

三、目录hardware/ril/reference-ril分析。本目录下代码主要负责与modem进行交互。 文件reference-ril.c:此文件核心是两个函数:onRequest和onUnsolicited 。

onRequest 函数:在这个函数里,对每一个RIL_REQUEST_XXX请求,都转化成相应的AT command,发送给modem,然后睡眠等待。当收到此AT command的最终响应后,线程被唤醒,将响应传给客户进程(RIL_onRequestComplete -> sendResponse)。

onUnsolicited函数:这个函数处理modem从网络端收到的各种事件,如网络信号变化,拨入的电话,收到短信等。然后将时间传给客户进程(RIL_onUnsolicitedResponse -> sendResponse)文件atchannel.c:负责向modem读写数据。其中,写数据(主要是AT command)功能运行在主线程中,读数据功能运行在一个单独的读线程中。

Android源码at_send_command_full_nolock:运行在主线程里面。将一个AT command命令写入modem后进入睡眠状态(使用 pthread_cond_wait或类似函数),直到modem读线程将其唤醒。唤醒后此函数获得了AT command的最终响应并返回。

函数readerLoop运行在一个单独的读线程里面,负责从modem中读取数据。读到的数据可分为三种类型:网络端传入的事件;modem对当前AT command的部分响应;modem对当前AT command的全部响应。对第三种类型的数据(AT command的全部响应),读线程唤醒(pthread_cond_signal)睡眠状态的主线程。

【编辑推荐】

  1. Android应用程序组建原理深入剖析 Android SMS短信服务相关概念简述
  2.  
  3. PythonAndroid数据库相关代码解读
  4. PythonAndroid安装卸载程序具体操作方法解析
  5. Android应用程序的四个关键点
责任编辑:chenqingxiang 来源: 计世网
相关推荐

2010-02-05 15:47:00

Android JDK

2009-07-01 10:55:23

2022-10-18 17:59:46

Bootstrap源码父类

2023-11-02 20:05:17

KubernetesPod管理

2021-08-10 07:00:00

Nacos Clien服务分析

2014-07-18 09:51:05

挖掘数据分析

2014-04-29 13:16:42

OpenGLAndroid库加载过程

2013-04-03 15:45:51

Android瀑布流android_wat

2024-01-29 08:28:01

Spring事务失效

2018-07-19 15:57:46

ViewStub源码方法

2018-08-20 13:46:59

Android逆向分析终端安全

2010-03-03 16:14:56

Android系统市场

2011-09-15 09:52:45

Delphi XE2

2011-10-31 13:42:46

Android客户端人人网

2017-02-17 11:19:00

Android内存泄露分析总结

2011-03-15 11:33:18

iptables

2014-08-26 11:11:57

AsyncHttpCl源码分析

2011-11-14 10:27:22

FlashAndroidAdobe

2011-05-26 10:05:48

MongoDB

2012-02-13 12:47:41

Android 4.0Launcher源码分析
点赞
收藏

51CTO技术栈公众号