简介: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.服务绑定后,再次点击绑定服务,不会有任何变化;
结果
网友评论