Android服务(Service):顾名思义,就是和windows平台的服务一样,在后台默默的承担某些任务执行着,一般的实例例如音乐播放,后台wlan更新,定期访问某些接口等等
Service共分为两种:
1.无返回值的启动服务startService(),该服务不与前台产生任何关联,只能通过stopself()或者stopService()来关闭
2.有返回值的启动服务bindService(),改服务会在service启动后返回给启动器一个返回值,然后可以通过返回的IBinder对象来进行通信,当启动器关闭时,其也跟着关闭(必须有界面吗?)
生命周期方法
startService(Intent service)-->onCreate()-->onStartCommand(Intent intent,int flags,int startId)(多次启动,多次执行)->onDestroy()
startService()方法,由于每一个都是单例模式,所以每次启动传入的intent可以相同,也可以不同,每次启动时,onStartCommand方法都会执行一次,onStartCommand方法里面的第一个参数intent就是startService()里面传入的intent.
bindService(Intent service,ServiceConnection conn,int flags)->onCreate()->onBind(Intent intent)->onDestroy()
bindService()方法,每次启动时只能启动一次,即每一个activity都只能启动一次(启动不关闭的情况),多次bindService()并不会重复执行.
bindService()方法的第二个参数需要传一个ServiceConnection的实例化对象过去,用来保证activity和service之间的联系,第二个参数可以为空(但是写null时却报了错误,不知道在具体什么情况下才可以传null),到了OnBind()方法时,与startService()方法一样,intent都是启动时候传过来的service(),OnBind()方法需要返回一个IBinder对象,但不能新建一个类实现IBinder接口,那样返回的IBinder,系统不会将其送到ServiceConnection中的onServiceConnected方法中,返回的应该为Binder的子类对象.第二个activity实现bindService,也会获取同一个Binder的子类对象,但是并不会执行OnBind方法,只会执行ServiceConnection中的onServiceConnected方法,意思就是已经连接上了
目前服务可以在某些品牌手机清理时被杀死,已经在以前的文章列表中体现出来了
下面说一下onstartCommand的返回值,这个就是从别处照抄的
可以通过bindService和StartService方法访问同一个service,但是其中一个关闭了并不会导致service关闭,必须得两者都被关闭后,service才会关闭