In the Androird,
service is a none-UI background process that is doing some specific jobs.



  6.1 Example Program : Understanding of Android Service.



  6.2 Classification of Android Services


    * Android Service

      * System Service

        * Java System Service

          * Core Platform Service

          * Hardware Service

        * Native System Service

      * Application Service

        * Local Service

        * Remote Service



  6.3 Android Application Service

    * It's one of the android application components.

      * Usage

        * Service start/end

          : Start/End a service on the background.

        * Remote control through binding

          : If a service client binds to the service, the client can control 

           functions of the service through an interface provided by service 

           while the binding is maintained.

    6.3.1 Separation of Application Service

※ The example of this chapter is in the API demos of Android 2.2.

      * The application service is separated to local service and remote service. 

       A basis of this separation is whether an application and a service that is 

       created by application is in same process or separate.

      * The local service ends when application ends. but the remote service 

       don't end though application ends.

      * The difference between local service and remote service is the binding 

       way for the service control.

        - Local Service

          : Because the client program and service are on the same process, so 

           local service binding needs only reference of local service that is 

           bound by client.

        - Remote Service

          : For using a service, Activity must use IPC mechanism. In this case, 

           binder IPC is used. When it sends or receives between service and 

           activity in the binder IPC communication, it must go through 

           marshalling or unmarshalling, for this process it uses the AIDL.

※ AIDL(Android Interface Definition Language)

  : On the android device, The AIDL is a IDL language for writing codes to 

   communicate between two prosesses. 

   (http://developer.android.com/guide/developing/tools/aidl.html)

A. Local Service

        (1) Try to local binding through bindSercive() API.

          * bindService(Intent, ServiceConnection, int)

            - Intent

              : An intent for local service.

            - ServiceConnection

              : On the service client side, it processes the binding connection

               with service. 

            - int

              : Context.BIND_AUTO_CREATE is a flag that creates a service 

               automatically, if there is not service to bind.

        (2) For the binding processing, android calls the onBind() callback 

           method in service.


          * the onBind() method returns a LocalBinder object that is extended for 

           connecting with activity and itself.

        (3) Android framework calls the onServiceConnected(ComponentName, 

           IBinder) method in the side of service client.

          * mBoundService = ((LocalService.LocalBinder)service).getService()
            - The IBinder argument is returned from onBinder() method.

        (4) Save a reference value of the LocalService into the mBoundService  
  

           member field in activity.

B. Remote Service

        (1) Binding Activity : Requesting to connect with RemoteService


          * Using the bindService() API for the control.

          * The different part with local binding is in manifest file that 

           includes processing about com.example.android.apis.app.ISecondary

           action.

        (2) RemoteService Service : Implementing the Actual Service Method 

           Function and Providing the Binder Object for communicating with 

           Service.

          * Main roles of the onBind() method is for creating the service binder 

           object for processing the binder IPC and returning it.

          * The binder service object is created through the automatically 

           created ISecondary.stub class of ISecondary.java file. And when the 

           binder service object is created, implement the getPid() method(or 

           whatever) as the actual code.

        (3) Binding Activity : Create the Proxy Object for Processing the Service 

           and the Binder IPC.


          * When the onServiceConnected() call-back method of ServiceConnection 

           object is called, the second IBinder typed argument is passed to 

           ISecondary.Stub.asInterface() function. And then created and returned 

           ISecondary.Stub.Proxy proxy service object is saved into 

           mSecondaryService member variable.

          * It's the end of binding process. And after this process, a activity 

           can call methods of RemoteService like it owns them.

        (4) Binding Activity : Through the Using of Proxy Object, Call The 

           Service Proxy Method in the Remote Service.

        (5) Binder IPC : Pass the Binder IPC Data from the Service Proxy Object 

           to Service Binder Object.

        (6) RemoteService Service : Call the Stub Method of RemoteService 

           Service.

※ The Creation Classification of Local Service With Remote Service.

  * The answer is in the manifest file. All of the android services must be 

   represented to elements in the manifest file.

  A. Local Service

    : Only of names of that can be implemented service from class are written 

     in the "android:name" attribute.

  B. Remote Service

    : In addition to local service, remote service is using the 

     "android:process" attribute in the manifest file. If there is not the 

     attribute, that service will perform as a local service.

  6.4 Android System Service

    * Android system services are in the application framework layer and 

     libraries layer.

    6.4.1 Classification of System Service

      (1) Native System Service


        * Representatively, audio flinger service and surface flinger service are 

         exist.

      (2) Java System Service

        A. Core Platform Service

        B. Hardware Service

  6.5 Running the System Service

    * Can use the system service directly with getSystemService()
method. 

     Because, the system service is launched by init process on the booting 

     process.

    * The system service is started by the media server and the system server.

      - The media server process

        : Execute the native services like audio server or media player server.

      - The system server process

        : This process is on the java based, and created first by Zygote.

        : Execute native system services like the surface flinger and etc.

* Creation Process on the Android System Booting

      (1) Start the Media Server Processes.

      (2) Start the Zygote.

      (3) Start the System Server.

      (4) Start the Surface Flinger Services.

      (5) Start the Java System Services.



    6.5.1 Media Server Execution Code Analysis

      (1) Start from Init Process.

        * It makes the native services(Audio Flinger, Media Player Service, 

         Camera Service, Audio Policy Service, etc) started  by
the media server.

      (2) Create and Initialize the Native Service Instance.

        * Do this in the main function of media server.

      (3) Look up the Initializing Code in Each System Services.

        * Using binder IPC.

        * Service provider like system service have to register information to 

         manifest manager.

        * Each initializing codes are shaped of same form. just using new and 

         addService() each services' functions to context manager.

        * defaultServiceManager() function returns an object, service manager is 

         sort of proxy object doing binder communication with the context 

         manager.

        * It has simple mechanism. Just create each instance of service, and 

         register to context manager.



    6.5.2 Analysis of Running Code of Server

      (1) Created by Zygote.

      (2) Load android_servers library.


        * In the main() method of SystemServer class, system_init() JNI function 

         is called by the init1() method. Because, SystemServer is a Java 

         process. So can't call the c++ based custom service.

        * After start a service, call the callStatic() function to call the 

         init2() method.

      (3) Initialize and Register the Java System Service.

        * In the init2() method, Create and run the ServerThread that creates all 

         of the Java system service.

        * Register to ContextManager as like native system services, but use the 

         addService() static method in the ServiceManager class.






Android Service Summary的更多相关文章

  1. android service两种启动方式

    android service的启动方式有以下两种: 1.Context.startService()方式启动,生命周期如下所示,启动时,startService->onCreate()-> ...

  2. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

  3. Android Service完全解析,关于服务你所需知道的一切(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

  4. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  5. android service 的各种用法(IPC、AIDL)

    http://my.oschina.net/mopidick/blog/132325 最近在学android service,感觉终于把service的各种使用场景和用到的技术整理得比较明白了,受益颇 ...

  6. Android service介绍和启动方式

    1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...

  7. Android Service初始

    一.Service概念 1.Service是一个应用程序组件 2.Service没有图像化界面 3.Service通常用来处理一些耗时比较长的操作 4.可以使用Service更新ContentProv ...

  8. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...

  9. Android service binder aidl 关系

    /********************************************************************************** * Android servic ...

随机推荐

  1. tesseract训练手写体

    前面的步骤都一样,从第4步开始 4.使用tesseract生成.box文件: tesseract eng.handwriting.exp0.tif eng.handwriting.exp0 -l en ...

  2. swing界面jframe新开线程自动定时刷新

    https://www.cnblogs.com/softidea/p/4411452.html

  3. IO流3 --- File类的常用方法2 --- 技术搬运工(尚硅谷)

    File类的判断功能 @Test public void test5(){ File file = new File("hello.txt"); //判断是否是文件目录 Syste ...

  4. IbatchBolt和BaseTransactionalBolt区别

    void prepare(java.util.Map conf, TopologyContext context, BatchOutputCollector collector, T id) T id ...

  5. springMVC的功能和优点

    spring MVC是一个分层的java web开发框架,MVC模式提供了一个分层的体系结构,其中每一层对其它层进行了抽象,具体如下: 1.模型(Model):应用程序所使用的特定域信息的表现形式 2 ...

  6. python 全局种子与局部种子

  7. 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II

    P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...

  8. 记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法

    原文:记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法 转载请注明出处:http://www.cnblogs.com/Ray1024 一.问题描述 在MFC中使用Dir ...

  9. 并发模式与 RPS 模式之争,性能压测领域的星球大战

    本文是<如何做好性能压测>系列专题分享的第四期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论 ...

  10. Linux之脚本安装包

    1.脚本安装包 脚本安装包不是独立的软软件包类型,常见的安装时源码包 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装 类似于windows下的软件安装 一般是硬件驱 ...