8.2 Service

2018-07-09  本文已影响0人  jadefly

简介:Android中实现程序后台运行的解决方案,适用于无需用户交互要求长期运行的任务;

      (一个可以在后台执行耗时操作,且不提供UI界面的App组件,也可以理解为,一个运行在后台,没有界面的Activity)


生命周期

生命周期

onCreate():当Service第一次被创建后立即回调该方法,该方法在整个生命周期 中只会调用一次;

onDestory():当Service被关闭时会回调该方法,该方法只会回调一次;

onStartCommand(intent,flag,startId):当调用startService(Intent)方法时回调,可多次调用StartService方法, 但不会再创建新的Service对象;

IBinder onOnbind(intent):该方法是Service都必须实现的方法,会返回一个 IBinder对象,app通过该对象与Service组件进行通信;

onUnbind(intent):当该Service上绑定的所有客户端都断开时会回调该方法;


启动方式

StartService:1.其他组件调用startService方法启动,启动后生命周期与启动它的组件无关(启动组件销毁服务还在);

                        2.需完成任务后stopSelf或其他组件调用stopService才能停止服务(无论启动多少次,只需停一次);

                        3.再次调StartService会回调onStartCommand;

BindService:1.调用者与服务绑定在一起,同生共死;

                         2.再次调BindService,不再调用onBind,但会将Binder对象传递给后增加的客户端;

注:先StartService,再BindService,若unBindService,服务依然存在;

(原因:由于服务开始由StartService启动,再次BindService只是将Service的内部IBinder对象传递给Activity等组件,并未真实绑定)

1.StartService创建销毁

创建service 清单文件配置 代码启动停止

执行流程(点击两次开始服务,再点击一次停止服务):

1.onBind()方法并没有被调用;

2.多次点击启动Service,只会重复地调用onStartCommand 方法;

3.无论我们启动多少次Service,一个stopService就会停止Service;

结果

2.BindService绑定与解除

创建service 清单文件配置 代码绑定与解除

执行流程(点击绑定服务,点击获取值,再点击解除绑定):

1.可以在onBind()方法中返回自定义的IBinder对象并在 ServiceConnection的onServiceConnected()方法中获得 IBinder对象;

2.绑定多客户端情况需要解除所有 的绑定才会调用onDestoryed方法进行销毁;

3.服务绑定后,再次点击绑定服务,不会有任何变化;

结果
上一篇下一篇

猜你喜欢

热点阅读