Service没有用户界面,运行与后台。一般用于给前台Activity提供特定服务。服务不能自己运行,启动Service的方式有两种:Context.startService 或 Context.bindService。
(一)startService
使用startService()方法启用服务后,调用者与服务之间没有关连。调用者直接退出而没有调用stopService的话,Service会一直在后台运行。下次调用者再起来仍然可以
1)启动流程:
如果调用前服务没有被创建,则会引起onCreate()->onStart();
如果已被创建,则多次调用startService只会引起onStart()被多次调用。
2)结束方式:
只能调用Context.stopService()结束服务,系统会自动调用到onDestroy()方法。
(二)bindService
使用bindService()方法启用服务,调用者与服务绑定在一起了,调用者一旦退出,服务也就自动终止。
1)启动流程:
如果调用前服务没有被创建,则会引起onCreate()->onBind();
如果已被创建但没有被绑定,则会引起onBind();
如果服务已被绑定,则多次调用bindService并不会引起onCreate()和onBind()被多次调用。
2)结束方式:
调用者退出,系统会自动调用服务到onUnbind()->onDestroy()方法。
如果调用者希望与正在绑定的服务解除绑定,可以调用Context.unbindService(),该方法会导致系统调用服务的onUnbind()-->onDestroy()方法。
注意:
1)如果第一次调用startService(), 系统会onCreate()->onStart();此时调用bindService, 只会onBind();如果第一次调用bindService(), 系统会onCreate()->onBind();此时调用startService, 只会onStart();
2)如果start和bind都调用了, 那么一旦服务被绑定(只要成功调用了bindService, 不管是先start后bind还是后bind先start), 就必须调用unbindService和stopService(先unbindService(导致onUnbind())再stopService(导致onDestroy()), 或者先stopService再unbindService(导致onUnbind()->onDestroy())都行)才能终止服务。
来自:http://blog.sina.com.cn/s/blog_49f62c3501010bkz.html