• Android四大套件Service


    • 以下是一个用XMind编写的Service概述

    • Service组件开发      

            第一步:继承Service类  public class SMSService extends Service {}

            第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:<service android:name=".SMSService" />

            第三步:启动服务

            方法一:context.startService():调用者与服务之间没有关连,即使调用者退出了,服务仍然运行

            方法二:context.bindService():调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点

    • 启动/停止/绑定Service的相关方法
    1. 启动指定Service

              pubic ComponentName StartService (Intent dervice)

              参数Intent,在该意图中指定启动的目标service.启动方法有显示意图和隐式意图两种

              说明: startService()在ContextWrapper类中定义,该类的父类是Context

              ContextWrapper类是Activity的间接父类和Service的直接父类

              实例:Intent intent = new Intent(元组件,目标Service.class);startService(intent);

          2. 停止Service

              boolean stopService(Intent Service)

              和启动相同

              stopService 方法在ContextWrapper类中定义

          3. 在Service内部停止Service

              final stopSelf()

              该方法不会回调Service中的onDestory方法

          4. 与intent指定的目标Service绑定

              bindService(Intent, ServiceConnection, int flag)

              intent:启动intent对象中指定目标的Service

              conn:实现了ServiceConnection接口的对象,该对象用于监听访问者与service之间的绑定情况,成功后将调用SCNN对象的onServiceConnectend方法

              flags:绑定时是否自动创建Service.值为0是不自动创建Service当Bind_AUTO_CREATE常量(值为1)时,自动创建Service

              Service和其绑定的activity生命周期之间的关系

          5. ServiceConnection接口

              作用:用于监听访问者与Service之间的连接情况,该接口定义了两个方法

              onServiceconnected(Conponentname name, INinder Service)

              作用:绑定成功是触发本方法

              name:被绑定的Service实例

              Service:通过被绑定的Service类中的onBind方法返回一个Ibinder类型的对象

              onServiceDisconnected(ConponontName name)

              绑定出现异常,引用程序出现崩溃时触发本方法

          6. bubindService(ServiceConnection conn)

              解除conn相关的Service的绑定

              conn是一个实现了SCNN的接口的对象

              bubindService执行后,系统会回调Service的onDestory()方法

    • service生命周期       

             onCreate():

             该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。

             onDestroy():

             该方法在服务被终止时调用。与采用Context.startService()方法启动服务有关的生命周期方法

             onStart():

             只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart()方法会被多次调用。

             onBind():

             只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。

             onUnbind():

             只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用

    • Service绑定原理

            概述:1 一个Ser和一个activity只能绑定一次

                   2 一个activity可以同时绑定多个Service

                   3 一个ser可以和多个act绑定

                   4 当绑定到一个Service,且讲flag设置为BIND_AUTO_CREATE时,如果该Service未创建,在先创建ServiceonCreate0,然后在绑定,如果已创建,则直接绑定

                   5 Ser被多个act绑定只有当所有客户端被解绑才会被destory

                   6 Binder类用于多个客户端与服务端通信,Binder意思是别针,将客户端与服务端绑定到一起

             绑定组件时数据传递分析(代码)

             bindService与startservice比较:

                   1 通过多次调用startService每次都触发Service类中的onStartConnand(),并用Intent对象向Service传递不同的数据,从而达到控制Service,但是不方便

                   2 通过绑定的方式,使用onBind传递给ServiceConnection的Ibinder控制Service方式比较便捷,实际开发中推荐使用这种方式

             关于onServiceDisconnected方法的调用:

                   1 当activity与Service绑定是,若出现进程崩溃,则onServiceDisconnected方法将触发

                   2 当进程被终止是,将触发onServiceDisConnected

                   3 onServiceDisConnected方法由Android系统调用,不要程序触发,不要在此方法中写业务逻辑代码

             onRebind():重新绑定

    • 隐式意图启动Service

             概述:1 使用隐式意图可以启动另外一个应用程序的服务,从而实现跨进程启动服务

                    2 在向清单中注册Service是通过添加intent-filter,允许设备中其他应用程序通过隐式意图启动自己的Service

                    提示:若不想让其他应用程序启动本程序中的Service,不要在Service标签中声明intent-filter

  • 相关阅读:
    POJ 2411 Mondriaan's Dream -- 状压DP
    codeforces 792A-D
    codeforces 796A-D
    Acdream1201 SuSu's Power
    HDU 2818 Building Block
    C# NetStream
    基于Duff's Device的C简易无栈协程实现
    CentOS 多版本 GCC 共存
    2017杭电多校第一场
    2019杭电多校第十场
  • 原文地址:https://www.cnblogs.com/lwxalxy/p/4700481.html
Copyright © 2020-2023  润新知