Service:首先,service是Android的四大组件之一,service会一直在后台运行,但它却没有界面。但它却有自己的生命周期,但它却有两种途径
Android的四大组件都需要在AndroidManifest.xml文件中配置,它跟Activity很相似,它是从Context派生出来的,所以它可以调用Context里定义的方法、例如:getResources()、getContentResolver()。
1、IBinder onBind(Intent intent):该方法是Service子类必须实现的方法,返回值是IBinder对象,应用程序可通过该对象与Service组件通信。
2、onCreate()和onDestroy()分别是Service第一次创建后立即调用和Service被关闭之前将会调用
3、onStartCommand(Intent intent, int flags, int startId):该方法和onStart(Intent intent, int flags, int startId)是一样的,每次调用startService(intent)这个方法时,都会回调该方法。
4、onUnbind(Intent intent):当该Service上绑定的所有客户端都断开连接时都会回调该方法。初学者所做的测试就是调用stopService(intent)。
看到Service的生命周期,我们不难看出Service的两种的开启方式:
1、startService(intent):通过该方法启用Service,访问者与Service之间没有关联,即使访问者退出了,Service仍然运行。
2、bindService(intent, conn, Context.BIND_AUTO_CREATE):此方法与上一个不同的是,访问者与Service是绑定在一起的,访问者退出了,Service也终止运行。
startService(intent)和stopService(intent)分别启动和关闭Service,如果不对访问者进行绑定,Service和访问者之间基本不能进行数据的交换和通信。
bindService(Intent service, ServiceConnection conn,int flags)就可以解决这一问题。
service:该参数通过Intent指定要启动的Service。
conn:它用来监听访问者与Service之间的连接情况。访问者与Service之间连接成功时将回调该ServiceConnection对象中的onServiceDisconnected(ComponentName name)方法;当Service所在的宿主进程由于异常中止或其他原因终止,导致该Service与访问者之间断开连接时回调该ServiceConnection对象的onServiceConnected(ComponentName name, IBinder service)方法。
flags:指定绑定时是否自动创建Service。为0时,不自动创建;BIND_AUTO_CREATE时,自动创建。
注意:ServiceConnection对象的onServiceConnected方法中有一个IBinder对象,该对象即可实现与绑定Service之间的通信。
当开发Service类时,该Service类必须提供一个IBinder onBind(Intent intent)方法,在绑定本地Service的情况下,onBind(Intent intent)方法所返回的IBinder对象将会传给ServiceConnection对象里的onServiceConnected(ComponentName name, IBinder service)的service参数,这样访问者与Service之间就可以通信了。