《Android的设计与实现:卷I》——第3章 3.4.5解析Action

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 本节书摘来自华章出版社《Android的设计与实现:卷I》——第3章,第3.4节。作者: 杨云君著.更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4.5 解析Action

1.parse_action

解析Action首先从parse_action函数开始,代码如下:
static void parse_action(struct parse_state state, int nargs, charargs)
{
struct action act;
……//省略错误处理内容
act = calloc(1, sizeof(act));
act->name = args[1];
list_init(&act->commands);
/将Action的指针节点放入action_list中/
list_add_tail(&action_list, &act->alist);
return act;
}
从parse_action函数的代码可以看出,解析Action的过程与解析Service的过程十分相似。首先给新创建的Action分配存储空间,然后将Action的指针节点放入一个action_list列表中。这里又涉及两个重要的数据类型:action结构体和action_list链表。
action_list与service_list都是由list_declare宏声明,即static list_declare(action_list)。
action结构体定义在/system/core/init/init.h中,代码如下:
struct action {
/这个指针节点所在的链表存储了所有Action的指针节点 /
struct listnode alist;
/这个指针节点所在的链表存储了所有即将执行的Action的指针节点/
struct listnode qlist;
/这个指针节点所在的链表存储了所有要触发的Action的指针节点/
struct listnode tlist;
unsigned hash;
const charname;
/Action对应的Command/
struct listnode commands;
struct command current;
};

2.parse_line_action

熟悉了Action的存储形式,接着分析Action的解析过程。定位到parse_line_action函数,该函数位于init_parser.c中,代码如下:
static void parse_line_action(struct parse_state state, int nargs, charargs)
{

struct command cmd;
/通过state结构体得到当前Action的引用/
struct action *act = state->context;
int (func)(int nargs, charargs);
int kw, n;
/依然是根据关键字匹配,不过这次匹配的是Command /
kw = lookup_keyword(args[0]);
n = kw_nargs(kw);
……//省略错误处理内容
cmd = malloc(sizeof(cmd) + sizeof(char) nargs);
cmd->func = kw_func(kw);//获取Command对应的指令函数
cmd->nargs = nargs;
memcpy(cmd->args, args, sizeof(char)nargs);
/将Command加入Action的Command列表/
list_add_tail(&act->commands, &cmd->clist);

parse_line_action函数的执行过程很清晰,要比parse_line_service简单很多。
这里涉及一个重要的数据类型struct command。command结构体定义在/system/core/init/init.h中,代码如下:
struct command
{
/ list of commands in an action /
struct listnode clist;
/ command对应的执行函数/
int (func)(int nargs, charargs);
int nargs;
char args[1];
};
至此,init.rc的解析过程便告一段落。接下来开始分析Action和Service的执行阶段。

相关文章
|
2月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
1月前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
52 0
|
3月前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
36 3
|
2月前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
58 0
|
3月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
74 4
|
3月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
55 6
|
3月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
421 0

推荐镜像

更多