Android笔记01:有关Service的一些知识

一、什么是Service?

Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。另外,一个组件能够绑定到一个service与之交互(IPC机制),例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。

二、Service的两种状态

Service 有两种状态 started(启动的) 和 bound(绑定) 。

1. 启动的服务

通过客户端,通常是一个Activity,调用startService即可启动一个服务,我们称之为StartedService,或者是UnboundService。

service通过startService启动之后,就会独立的运行,与客户端Activity无关,Activity的存在与否不影响service的运行。只有当客户端调用stopService()或者其本身调用stopSelf()时,service才会停止,然后系统将其销毁

2. 绑定的服务

通过客户端调用bindService即可将此客户端与一个Service绑定,不过要注意,bindService方法中需要传入一个ServiceConnection实例,来监测服务绑定成功或者失败。

通过bindService将 activity与service绑定之后,客户端(activity)可以通过一个IBinder接口与service通信。当activity结束的时候,需要手动调用unbindService解除与service的绑定。一个service可以与多个客户端绑定,当所有客户端都解除绑定后,系统将会销毁service。

 3. 一个服务可以既是unbound也是bound

这两种方式并不是完全独立的,一个service被startService启动之后,也可以被客户端绑定。这时如果调用stopService或者stopSelf,系统并不会销毁service,除非所有客户端都解除与此service的绑定。

三、Serviced的声明周期

 

  • 启动的服务:从onStartCommand()接收并处理startService传递过来的intent,并在客户端调用stopService或者服务本身调用stopSelf结束
  • 绑定的服务:从onBind()接收并处理bindService传递过来的intent,并在客户端调用unbindService时结束

简单一句话来说,一个既被启动又被绑定的service,只有当所有与之绑定的client全部解除绑定,并且调用stopService或者stopSelf,系统才会销毁此服务。

猜你喜欢

转载自www.cnblogs.com/alyssayoung/p/8970878.html