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


    http://www.android-study.com/jichuzhishi/585.html


    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相关接口:
    1
    2
        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:  系统集成工程师负责
    第二类service:  framework系统工程师负责
    第三类service:芸芸众生的android应用程序开发者每日亲密接触

  • 相关阅读:
    使用 linux kernel +busybox 定制linux系统
    记一次golang的内存泄露
    关于Queries_per_sec 性能计数器
    NUMA导致的MySQL服务器SWAP问题分析
    Drop Table对MySQL的性能影响分析
    当MySQL数据库遇到Syn Flooding
    tcp_tw_recycle参数引发的数据库连接异常
    一例数据同步异常问题分析
    MySQL大量线程处于Opening tables的问题分析
    MySQL DeadLock故障排查过程
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646116.html
Copyright © 2011-2022 走看看