美文网首页
特殊的系统服务:ServiceManager

特殊的系统服务:ServiceManager

作者: 六月小微风Online | 来源:发表于2019-10-17 22:20 被阅读0次
    1.有几个重要的问题需要理清楚:

    (1)ServiceManager的启动流程
    (2)ServiceManager的binder对象如何被获取
    (3)如何向ServiceManager添加系统服务
    (4)如何由ServiceManager获取系统服务

    2.ServiceManager的启动流程
    • 启动进程
      注意ServiceManager和其他进程的区别
    • 启动binder机制
      (1)打开binder驱动(2)映射内存(3)注册binder线程
    • 向binder驱动注册
      告知binder驱动,当前ServiceManager已经就绪
    • 进入binder循环
      在这个LOOP中不断的读请求,处理请求
    //伪代码
    int main(int argc , char **argv){
        //分配内存,然后内存映射
        bs = binder_open(128*1024);
    
        //告知binder驱动,ServiceManager已经就绪
        binder_become_context_manager(bs);
    
        binder_loop(bs,svcmgr_handler);
        //两个阶段:1. 将当前线程注册为binder线程,告诉binder驱动,当前的线程是可以处理binder请求的
    //int res = ioctl(fd,BINDER_WRITE_READ,binder_write_read); 将binder_write_read的数据写入到fd(binder驱动)中
        //2. for(;;)循环中再用ioctl不断的读取请求,循环过程中还会回调func处理请求
    
        return 0;
    }
    
    
    3.ServiceManager的binder对象如何被获取

    实际的代理是new BpBinder(handler );//handler == 0

    4.如何向ServiceManager添加系统服务
    • 获取ServiceManager的binder对象
    • 发起addService(1,2)的binder调用
      注意,其中需要传入两个关键参数:(1)服务的名称(2)该服务的binder实体对象
    5.如何由ServiceManager获取系统服务
    • 获取ServiceManager的binder对象
    • 发起getService(1)的binder调用
      注意,需要传入一个参数:服务的名称

    相关文章

      网友评论

          本文标题:特殊的系统服务:ServiceManager

          本文链接:https://www.haomeiwen.com/subject/betbmctx.html