android四大组件之一Service:
service 是android的核心组件之一,不需要由用户去创建,有Android系统管理和维护。
所有的自定义Service都不许继承Service类,并且在Androidfest.xml中生命它
service是没有界面的适合在后台默默执行的生命周期长,虽然service是适合长期执行的,但是它还是运行在主程序中因此好事的功能应该写到分支线程中。
service的激活方式:
1)使用startServicer进行激活
使用startService(Intent)激活Service经历的生命周期为
1.onCreate()--->onStartCommand()---->onDestory()
可以反复的调用startService()激活同一个Service,但是service只能创建1次,后面会反复经历onStartCommand(),可以使用stopService()停止service,但是在service内部也可以使用stopSelf()停止service()
service的粘性
使用startService()激活的service会具有粘性,被意外终止的service会自动重启,会经历onCreate()--->onStartCommand()在startCommand()方法中的返回值,决定Service的粘性
1)Service.START_NOT_TICKY;//粘性
2)Service.START_STICKY;非粘性的
3)Service.STARTSTICKY_COMPATIBILITY;//兼容性粘性
4)service.START_REDELIVER_INTENT;粘性的 并且重启Service时会重新传值Intent
使用绑定的Service进行激活
绑定Service是通过bindService()激活Service的一种方式,绑定的Service是非粘性的
绑定的Service会对进程产生影响,若绑定Service是前台的,则Service也是前台的,若可见的进程绑定Service,则Service是可见的
绑定Service的生命周期为:onCreate()--->onBind()---->onDestory()
在service的onBind()方法中返回值不可以为null;否则将绑定不成功,在Activity中的ServiceConnection()方法不会被回调,也不能得到IBBinder
绑定的Service最后一定要解除绑定,最晚也要在Activity的onDestory()方法中解除绑定,调用的方法是unbindService()
Service的绑定流程
1)自定义service并继承service在AndroidMainfest.xml中声明service并根据具体情况是否添加隐式调用
2)自定义接口,约定其它组件(如Activity)调用Service方法的时候调用该方法
3)通常情况下,在Service中定义内部类几成Binder并实现自定义接口,重写自定义接口方法,吧其它组件需要调用的Service方法写到此方法中
4)定义IBBinder对象,并实例化内部类,在onBinder中返回该IBinder对象
5)在调用Service的组件中通过bindService(ServiceConnection flags) 激活service对象 在接口中定义该对象并强制转化为自定义接口类型