• 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应用程序开发者每日亲密接触

  • 相关阅读:
    Python使用SMTP模块、email模块发送邮件
    harbor搭建及使用
    ELK搭建-windows
    ELK技术栈之-Logstash详解
    【leetcode】1078. Occurrences After Bigram
    【leetcode】1073. Adding Two Negabinary Numbers
    【leetcode】1071. Greatest Common Divisor of Strings
    【leetcode】449. Serialize and Deserialize BST
    【leetcode】1039. Minimum Score Triangulation of Polygon
    【leetcode】486. Predict the Winner
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646116.html
Copyright © 2020-2023  润新知