zoukankan      html  css  js  c++  java
  • Android系统各种类型的service刨根解读

        Android存在3大类service, 处于android系统的不同框架层,详细解读例如以下:


    1) init.rc中的service

    //关键词“service"  name  二进制可运行程序路径

    service servicemanager /system/bin/servicemanager

        class core

        user system

        group system

        critical

        onrestart restart healthd

        onrestart restart zygote

        onrestart restart media

        onrestart restartsurfaceflinger

        onrestart restart drm

        事实上这类service就是为了定义开启启动的程序,该类service的对象是一个能够执行的binary程序。把它定义为一种service是为了更好的描写叙述该binary执行的属性。比方执行用户。组,启动一次(oneshot)还是不停启动(程序死掉后会再次启动)。更重要的是它还能描写叙述各个程序之间的关系。

    比方onrestart restart drm,这个描写叙述的意思是当drm程序重新启动时,该程序也要主动重新启动。

         同一时候通过例如以下命令还能够执行时动态启动或者关闭某一service,当然要有root权限

         property_set("ctl.start", "servicemanager");property_set("ctl.stop", "servicemanager");

         adb shell setprop ctl.start servicemanager;adb shell setprop ctl.stop servicemanager


    2) 系统层service


         该类service和我们通常理解的service非常接近,就是系统中提供服务的,该类service定义出服务接口,其它模块通过该接口即能使用该服务。该类服务的运行体能够是二进制代码。也能够是java代码。

    比方:

        c++类型的service:

             SurfaceFlinger,CameraManagerService, MediaPlayerService    

        java类型的service:

            ActivityManagerService,WindowManagerService,NetworkManagerService

        实现机制是该类service向上面提到的servicemanager注冊它的服务,其它模块通过名字从servicemanager拿到service的接口。在shell通过命令 "service list"能列出系统中全部的该类service。


         c++类型service相关接口:

             

    sp<IServiceManager> sm = defaultServiceManager();
    sm.addService(name, xx)/sm.getService(name)

        java类型service相关接口:

        ServiceManager.getService(name)/addService(name,xx)

    3) SDK层的service


    不像前面两类service,他们是一类对象的总称,而该类service是开发人员常常接触的一个非常详细的java类android.app.Service.java。它是android sdk暴露给第三方应用使用的。 它是和Activity对等的,是android 四大组件之中的一个(Activity,Service, Provider, BroadcastReceiver)。


    总结:

    第一类service:  系统集成project师负责

    第二类service:  framework系统project师负责

    第三类service:芸芸众生的android应用程序开发人员每日亲热接触

  • 相关阅读:
    了解PCI Express的Posted传输与Non-Posted传输
    最强加密算法?AES加解密算法Matlab和Verilog实现
    校招必看硬核干货:IC前端这样学,秒变offer收割机!
    一次压力测试Bug排查-epoll使用避坑指南
    硬核干货 | C++后台开发学习路线
    Web服务器项目详解
    O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
    Linux最大文件句柄(文件描述符)限制和修改
    linux中对EINTR错误的处理
    C/C++实现单向循环链表(尾指针,带头尾节点)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6986044.html
Copyright © 2011-2022 走看看