Android Service

Service

Service有两种启动方式,第一种是通过调用startService()方法来启动,另一种是调用bindService()方法来启动。

一.通过StartService()启动service

通过startService启动后,service会一直无限运行下去,即使activity销毁了也不会,只有外部调用了stopService()方法或stopSelf()方法时,该Service才会停止运行并销毁。创建这样的service,需要继承service类,然后重写以下方法:

onCreat():

service如果没有被创建过调用startService()方法后会先执行onCreate()方法;service如果已处于运行状态,调用startService()方法不会执行onCreate()方法。总而言之,onCreate()方法只会在第一次创建service的时候调用,多次执行startService()方法不会重复调用startService()。因此onCreate()方法适合处理一些初始化工作。

onStartCommand():

无论startService()方法被调用了多少次,onStartCommand()也相应的被调用相同的次数。可以根据该方法中传入的intent参数进行相应的操作。例如在该方法中创建一个线程用于下载数据或播放音乐。

onBind():

onBind()方法在service中是抽象方法,service类是一个抽象类,所以即使用不到onBind()方法,也必须重写该方法。

onDestory():

在service销毁的时候会执行onDestory()方法。

 

以上所有的方法都是service的回调方法,并且都是在主线程中执行。

 

通过startService启动服务时服务的生命周期如下:

 

 

 

二.通过bindService启动service

bindService启动的服务和调用者之间是类似于c/s架构模式。调用者是client端,service是server端。service只有一个,但绑定到service上面的client可以有一个或多个。这里所提到的client指的是组件(比如activity)。

在activity中可以通过Ibinder接口获取service实例,从而实现在activity中直接调用service中的方法来实现交互,用startService()方法启动的service是无法实现的。

bindService启动service的生命周期与其绑定的activity也有关系。当activity被销毁的时候,service也会自动与它解除绑定。在activity中也可以直接调用unBindService()方法与service解除绑定,当没有任何client与service绑定时,service会自动销毁。

通过绑定启动的service的生命周期:

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值