Android培训班(18)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 23:34 点击:

通上面的函数就可以把服务和事件触发的命令添加队列里。其实是在文件parser.c头部,就声明了下面三个链表,如下:

 

static list_declare(service_list);

static list_declare(action_list);

static list_declare(action_queue);

 

service_list是定义添加分析所有资源文件里的服务,action_list是定义添加分析所有资源文件里的事件触发的命令列表,action_queue是定义添加当前需要执行操作的命令动作或者服务等。

那么又有下面一个问题了,init进程是在那里添加这些服务或命令到运行队列呢?在init.c文件看到下面的代码:

    action_for_each_trigger("early-init", action_add_queue_tail);

    drain_action_queue();

 

原来是通过函数action_for_each_trigger来把所有需要按事件触发运行的命令添加到队列里,函数action_add_queue_tail把需要执行命令放到队列,函数drain_action_queue把添加到队列里的命令进行运行。

 

#001  void action_for_each_trigger(const char *trigger,

#002                               void (*func)(struct action *act))

#003  {

#004      struct listnode *node;

#005      struct action *act;

#006      list_for_each(node, &action_list) {

这行代码是遍历链表所有项。

 

#007          act = node_to_item(node, struct action, alist);

这行代码是把动作节点转换为动作项。

 

#008          if (!strcmp(act->name, trigger)) {

#009              func(act);

这段代码是当找到与用户输入相同事件触发的动作,比如上面是查找“early-init”事件。这时就把动作项添加到将要运行的队列里。

 

#010          }

#011      }

#012  }

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1