• Android属性系统源码:queue_builtin_action

    初始化的流程
    服务器君一共花费 16.092 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. [Python程序设计] Python语言概述 6 个条目
  2. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  3. [移动开发] Android布局基本知识 3 个条目
  4. [C语言程序设计] 结构体基本知识 1 个条目
  5. [Python程序设计] Django 入门知识浅介 10 个条目
  6. [移动开发] 从代码角度去认识 Activity 4 个条目
  7. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  8. [数据库技术] MySQL常用自带函数 3 个条目
  9. [JavaScript程序设计] jQuery与表单操作 2 个条目
  10. [PHP程序设计] 对输入文件类型的检测 1 个条目
  11. [智力开发与知识管理] 整体性学习步骤 9 个条目
  12. [软件工程与项目管理] 了解一点WebKit 9 个条目
窗口 -- [八点]