Service的两种启动方式和对应的生命周期

两种启动方式

  1. startService()启动方式:主要用于执行后台计算
  2. bindService()启动方式:主要用于和其它组件的交互
    说明:这两种状态是可以共存的,即一个Service既可以处于启动状态,也可以同时处于绑定状态。

1、启动方式

1、生命周期
这里写图片描述

2、流程

  1. 第一次调用startService()方法后,首先调用onCreate()和onStartCommand()方法,此时Service进入运行状态;如果这个时候再次调用startService()方法,就不会再创建新的Service对象,而是直接复用已经存在的Service,可以理解为Service是单实例模式,只能在系统中存在一个实例。
  2. 由于启动方式打开的Service和调用者没必然联系,所以调用者destroy之后,Service还是会继续运行的。
  3. Service并不是运行在一个独立的进程中的,而是依赖于创建服务时所在的应用程序进程,当某个应用程序进程被杀死的时候,依赖于该应用程序进程的Service也会被杀掉。
  4. 无论启动了多少次Service,只需调用一次StopService即可停掉Service

3、总结一下:

1.onCreate():该方法在整个生命周期中只会在创建Service时调用一次!
2.onDestory():该方法只会当Service被关闭时会回调一次!
3.onStartCommand(intent,flag,startId):当客户端调用startService(Intent)方法时会回调,可多次调用StartService方法, 但不会再创建新的Service对象,而是继续复用前面产生的Service对象,但会继续回调 onStartCommand()方法!

4、验证一下:

public class MyService extends Service {
    public static final String TAG = "MyService";
    public MyService1() {
    }

    @Override
    public void onCreate() {
        Log.d(TAG, "onCreate: ");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand: ");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.d(TAG, "onDestroy: ");
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

效果:
这里写图片描述

2、绑定方式

1、生命周期
这里写图片描述

2、流程

  1. 首先系统会在调用bindService之后实例化一个Service并绑定,然后紧接着调用onCreate和onBind()方法。
  2. 然后调用者就可以通过IBinder和Service进行交互了,此后如果再次使用bindService绑定Service,系统不会创建新的Sevice实例,也不会再调用onBind()方法,只会直接把IBinder对象传递给其他后来增加的客户端!
  3. 调用unbindService(),此时若只有一个客户端绑定了此服务,那么onUnbind和onDestory方法将会被调用!若是多个客户端绑定同一个Service的话,情况如下 当一个客户完成和service之间的互动后,它调用 unbindService() 方法来解除绑定。当所有的客户端都和service解除绑定后,系统会销毁service。
  4. 绑定模式下的Service和调用者共存亡
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 服务的启动方式两种:持续运行和受守护程序控制。持续运行的服务一旦启动就会一直运行,而受守护程序控制的服务可以被暂时停止和重新启动。服务的生命周期可以分为4个步骤:启动、运行、暂停和停止。在启动阶段,服务会被安装并被激活,以便被使用。在运行阶段,服务会按照一定的计划执行任务。在暂停阶段,服务可以被暂停,但不会停止运行。在停止阶段,服务会完成当前任务并停止运行。 ### 回答2: serviceAndroid平台上一种用于在后台处理长时间运行任务的组件。它可以在两种不同的方式启动启动型和绑定型。以下是对两种启动方式生命周期的简述: 1. 启动型服务: 启动型服务是通过调用startService()方法来启动的,即使启动服务的组件(如Activity)被销毁,服务仍会继续运行,直到调用stopService()方法来停止服务。启动型服务的生命周期包括以下几个阶段: - onCreate():服务首次创建时调用,在此方法中可以进行一些初始化操作。 - onStartCommand():每次通过startService()方法启动服务时都会调用此方法。在这里可以处理具体的业务逻辑。 - onDestroy():通过调用stopService()方法来停止服务时会调用此方法,可以在这里释放资源。 2. 绑定型服务: 绑定型服务是通过调用bindService()方法来启动的,它与启动型服务不同的是,该服务与一个客户端组件(如Activity)通过绑定而建立关联。绑定型服务的生命周期包括以下几个阶段: - onCreate():服务首次被绑定时调用。 - onBind():用于返回一个实现了ServiceConnection接口的对象,该对象可以控制与服务的连接与断开。在这里可以返回绑定服务的具体实现。 - onUnbind():当所有客户端与服务解除绑定时会调用此方法。 - onDestroy():当通过调用unbindService()来解除与服务的绑定,并且没有其他客户端与服务绑定时会调用此方法。 综上所述,启动型服务和绑定型服务的生命周期有一些相同的阶段,比如onCreate()和onDestroy()方法,但是它们的使用方式和触发时机有所不同。 ### 回答3: serviceAndroid中一种特殊的组件,用于在后台执行长时间运行的任务或提供持续运行的功能,它有两种启动方式启动启动和绑定启动启动启动(Started Service)是通过调用startService()方法来启动service的,即使没有与之绑定的组件,service也会持续运行直到任务完成或调用stopSelf()方法停止。启动启动service生命周期如下: 1. onCreate():在service创建时调用,只会被调用一次。 2. onStartCommand():在每次调用startService()方法时都会被调用,用于处理启动service时的具体任务逻辑。 3. onBind():由于启动启动不需要与其他组件绑定,所以返回null即可。 4. onDestory():在调用stopSelf()方法或系统强制销毁service时会被调用,用于释放资源和清理工作。 绑定启动(Bound Service)是通过调用bindService()方法将service与其他组件进行绑定的,它的生命周期如下: 1. onCreate():在service创建时调用,只会被调用一次。 2. onBind():当调用bindService()方法时,系统会调用onBind()方法返回一个IBinder对象给客户端,用于与service进行通信。 3. onUnbind():当调用unbindService()方法解除绑定时,会被调用,表示与service的绑定已解除。 4. onRebind():如果在解除绑定后又调用bindService()方法重新绑定service,会被调用。 5. onDestory():当所有与service的绑定都解除后,会被调用,用于释放资源和清理工作。 可以看启动启动service适用于执行一次性任务并且需要在后台持续运行的情况,而绑定启动service适用于与其他组件进行交互,并且当所有绑定解除时自动停止的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值