关于昨天去联想面试时候对一个问题印象比较深刻,怪自己当时没有深入去了解这个。再次输出一篇短文,大概的来阐述一下Android Service组件的启动方式。
Service是Android四大组件之一,那么都知道Service的启动方式有两种:是用Context调用的startService和bindService。
startService通过这种方法启动Service,访问者与Service之间没有关联,访问者退出了,Service仍然会运行。
bindService通过这种方法启动Service,访问者与Service绑定在了一起,访问者退出了,Service也就终止了。
两者除了这样的区别以外还有另一个区别就是:
如果是Service和访问者之间要进行方法调用或交换数据,则应该使用bindService。
bindService完整的写法是bindService(Intent service,ServiceConnection conn,int flags),这三个参数解释如下:
service:该参数通过Intent指定要启动 Service
conn:它是serviceConnection的对象,这个对象用于监听访问者与service之间的链接情况。当访问者与service之间链接成功将回调ServiceConnection中的onServiceConnected(ComponentName name , IBinder binder)方法;当service宿主进程由于意外退出了,导致service和访问者断开了会回调onServiceDisconnected(ComponentName name)。
开发Service类时候,提供了一个onBind方法,在绑定本地service情况下,onBind返回的IBinder对象会传给ServiceConnection 里的onServiceConnected方法的service参数,这样访问者就可以通过IBinder对象与service进行通信了。