摸鱼日记 09/16 day7 Android基础----Service

Service基础

service是一个可以在后台长时间运行的操作的没有用户界面的组件,运行于UI线程,因此不能进行耗时操作。
由于Service是运行在UI线程中的,是绝对不能进行耗时操作的,而Thread开启的子线程是可以进行耗时操作的,但是Thread开启的子线程不能直接对UI进行操作,否则极有可能直接让程序崩溃。

Service的启动方式

  1. StartService()方式开启的Service
    步骤:
    定义一个类继承Servcie
    在AndroidManifest.xml文件中配置该Service
    不在使用该Service时,调用Context的stopService(Intent)方法停止该Service
  2. bindService方法开启的Service(Activity与Service绑定)
    步骤:
    创建BindServcie服务器,继承自Service并在类中创建一个实现IBinder接口实现的实例对象并提供公共方法给客户端调用
    从onBind()回调方法返回给此binder实例
    在客户端中,从onServcieConnect回调方法接受Binder并使用提供的方法调用绑定服务。

Service的生命周期

在这里插入图片描述
在这里插入图片描述

因为Service的生命周期有两种,服务可以跟Activity绑定起来,也可以不绑定,Activity和服务进行通信的话,是需要把服务和Activity进行绑定,因此服务的生命周期分为未绑定Activity和绑定的Activity。
Service启动:

  1. 通过Intent和StartService方法启动了一个服务,接下来调用onCreate方法,首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用onStartCommand和onBind之前)如果服务已在运行,则不会调用此方法。
  2. 当另一个组件通过调用startService请求启动服务时,系统将调用此方法。一旦执行此方法,服务将会启动并且可在后台无限运行。如果实现此方法,则在服务工作完成后,需要通过stopSelf或stopService来停止服务。在绑定情况下,生命周期与Activity相绑定则不需要执行此方法。
  3. 服务开始处于运行状态
  4. 某个操作导致服务停止,比如执行了stopService方法,那么服务接下来会执行onDestory销毁。服务应该实现此方法来清理所有的资源,比如线程、注册的监听器、接收器等,这是服务器接受的最后一个调用
  5. 服务被完全销毁,下一步就是等待被垃圾回收器回收了
  6. 通过Intent和bindService方法启动一个服务,接下来回启动onCreate方法,首次创建服务时,系统将调用此方法来执行一次性设置程序,在调用onStartCommand和onBInd之前。如果服务已在运行,则不会调用此方法。
  7. 当另一个组件想通过bindService与服务绑定,比如说执行RPC时,系统将调用次饭饭嘎。在此方法的实现中,您必须通过返回IBinder提供一个接口,供客户端来与服务进行通信。
  8. 服务开始处于运行状态,成功与Activity绑定
  9. 当某个操作导致服务接触绑定,比如说执行了方法unbindService,那么服务接下来会解除与当前的Activity的绑定。服务面临销毁
  10. 服务执行onDestory方法被销毁,服务应该实现此方法来清理所有的资源,比如线程、注册的侦听器
  11. 服务被完全销毁,接下来就是被垃圾回收器回收。

被启动的服务的生命周期:如果一个Servcie被某个Activity调用Context.startService方法启动,那么不管是否有Activity使用bindService绑定或者unbindService解除绑定到该Service,该Service都在后台运行。如果一个Service被startservice方法启动多次,那么onCreate方法只会被调用一次,onstart方法会被调用多次,并且系统只会创建一个Servcie实例,所以只需要一次stopService的调用。该Service会一直在后台运行,而不管对应程序的Activity是否在运行,直到被调用stopService,或是自身的stopSelf方法。假如系统资源不足,Android系统可能结束服务

被绑定的服务的生命周期:如果一个Servce被某个Activity调用Context.bindService方法绑定启动,不管调用bindService被调用几次,onCreate方法都只会调用一次,onStart方法不会被调用。当连接被建立后,Service将会一直运行,除非调用Context.unbindService断开连接或者之前调用bindService的Context不存在,比如Activity被finish了,系统都会自动停止Service,对应onDestory将会被调用

被启动又被绑定的服务的生命周期:如果一个Service又被启动又被绑定,则该Service将会一直在后台运行。并且不管如何调用,onCreate始终都只会调用一次,对应的startService调用多少次,Service的onStrart便会调用多少次。调用unbindService将不会终止Service,必须调用stopService或Service的stopSelf的服务。

小Tips:
同时使用startService与bindService要注意,Service的终止,需要unbindServcie与stopService同时调用,才能终止Service,不管startService与bindService的调用顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值