Service的启动方式和设计理解

Service就是没有界面的Activity,这样理解Service或许有点让人难以信服。首先Service的生命周期和Activity是完全不一致的,然后是它的启动方式有两种,两种启动方式也各有区别。它在安卓framwork层的设计原理和实现的功能也和Activity完全不一致,所以请不要偷懒说Service就是没有界面的Activity,下面我们看看Service的生命周期。
这里写图片描述
实验1:如何开启一个服务?从生命周期图中可以看出,开启一个服务有两种方式:一种是直接调用Context提供的startService()方法开启一个服务,然后这个我们已经在清单文件里面注册的服务就会调用下面的方法,首先我们要注意的是Service的onStart()方法在某一个Api里面已经被onStartCommand()取代了,所以当调用startService(),传入一个Intent意图,Service用调用以下方法。
这里写图片描述
服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。
服务的生命周期—从创建到销毁—可以被分为以下两个路径:

  1. 启动类型的服务:

一个组件调用startService()方法创建服务,然后服务无限期的运行,并且必须通过调用stopSelf()方法来终止自己。其他组件也能够通过调用stopService()方法来终止这个服务。当服务被终止,系统就会把它销毁。

  1. 绑定类型的服务:

一个组件(客户端)调用bindService()方法创建服务,客户端通过IBinder接口与服务通信。客户端能够调用unbindService()方法来关闭与服务连接。多个客户端能够绑定到统一个服务,并且当所有的都解绑以后,系统就会销毁这个服务。(服务不需要终止自己)

这两个路径不是完全独立的。也就是说,你能够绑定一个已经用startService()方法启动的服务。例如,一个后台的音乐服务能够调用带有标识要播放的音乐的Itent的startService()方法来启动,稍后,可能在用户想要进行一些播放器的控制时,或想要获取有关当前歌曲信息,那么一个Activity就能够调用bindService()方法来绑定这个服务。在这个场景中,直到所有的客户端解绑,stopService()或stopSelf()方法才能实际终止这个服务。
2)当我们手动调用stopService(),service用调用下面的方法。和在service中调用stopself()方法的时候的区别是stopself()不用调用service的onStop()方法,而是直接调用onDestroy()方法。
这里写图片描述
3)如何绑定一个服务?当我们直接调用bindService()方法的时候,我们需要传递三个参数,第一个是我们绑定的意图,第二个是我们绑定的链接对象,第三个是 我们绑定的类型。意图可以不用讲,我们很明确要绑定哪个服务,第二个参数是一个服务绑定的链接对象,创建它需要实现两个方法,一个是onServiceConnected(ComponentName name, IBinder service)这个方法可以给返回我们绑定的服务,然后回调服务里面的方法,需要注意的是:只有我们在Service里面的onBinder()方法里面返回一个Binder子对象,才会调用该方法。还有一个方法是onServiceDisconnected(ComponentName name),当服务被解除绑定时会回调该方法。
详细博客可以看这个:http://www.jianshu.com/p/5d73389f3ab2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值