• Android属性系统源码:queue_builtin_action

    初始化的流程
    服务器君一共花费 19.362 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    回到 queue_builtin_action 函数中,完成 action 结构体内存分配,并将 name 成员赋值为形参 name,对于 Android 系统属性服务来说,该值为 property_init。然后初始化 action 结构体中成员 commands 的初始化,初始化工作很简单,将 listnode 的 next 和 prev 都指向自身,如下所示(system/include/cutils/list.h):

    static inline void list_init(struct listnode *node)
    {
        node->next = node;
        node->prev = node;
    }
    

    queue_builtin_action 函数完成 command 结构体的内存分配和成员赋值操作,对于 Android 属性系统服务,command 结构体的成员 func 指向 property_init_action 函数,成员 args 表示函数运行的参数值,此处只有一个参数,值为 property_init。然后调用 list_add_tail 将 command 的 clist 节点插入到 action 的 commands 节点之前,list_add_tail 函数代码如下:

    static inline void list_add_tail(struct listnode *head, struct listnode *item)
    {
        item->next = head;
        item->prev = head->prev;
        head->prev->next = item;
        head->prev = item;
    }
    

    然后将 action 的 alist 插入到 action_list 节点之前。那 action_list 又是什么呢?原来在 init_parser.c 源文件的开头(第 40 行)调用了 list_declare 宏定义了一个名为 action_list 的 listnode 结构体,list_declare 定义如下:

    #define list_declare(name)
    struct listnode name = {
    	.next = &name,
    	.prev = &name,
    }
    

    通过 action_add_queue_tail 函数将 action 结构体的成员 qlist 添加到 action_queue 前,action_queue 和 action_list 一样,也是通过 list_declare 宏定义的一个 listnode 变量。调用完queue_builtin_action 后,对于 action 和 command 结构体以及 action_list 和 action_queue 的关系:

    queue_builtin_action 在此处并不是最后一次被调用 , 因此 action_list 以及 action_queue 和 action 之间用虚点线表示,action_list 和 action_queue 之前还有其他的 action 结构体变量:

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 开始使用Git 3 个条目
  2. [软件工程与项目管理] 浏览器的HTML解析器 8 个条目
  3. [计算机算法] 两数交换的各种算法细节 2 个条目
  4. [移动开发] 从代码角度去认识 Handler 4 个条目
  5. [软件工程与项目管理] 了解一点WebKit 9 个条目
  6. [JavaScript程序设计] 关于HTTP Keep-Alive 6 个条目
  7. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  8. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  9. [PHP程序设计] PHP扩展模块安装 1 个条目
  10. [JavaScript程序设计] jQuery与表单操作 2 个条目
  11. [Python程序设计] Tornado表单处理 3 个条目
  12. [C语言程序设计] 结构体基本知识 1 个条目
窗口 -- [资讯]