http://blog.sina.com.cn/s/blog_6420e7480100h1yy.html

Android Service生命周期与Activity生命周期是相似的,但是也存在一些细节上也存在着重要的不同:
onCreate 和onStart是不同的 通过从客户端调用Context.startService(Intent)方法我们可以启动一个服务。如果这个服务还没有运行,Android将启动它并且在onStart方法之后调用它的onCreate方法。如果这个服务已经在运行,那么它的onStart方法将被新的Intent再次调用。所以对于单个运行的Service它的onStart方法被反复调用是完全可能的并且是很正常的。
onResume、onPause以及onStop是不需要的 回调一个服务通常是没有用户界面的,所以我们也就不需要onPause、onResume或者onStop方法了。无论何时一个运行中的Service它总是在后台运行。
onBind 如果一个客户端需要持久的连接到一个服务,那么他可以调用Context.bindService方法。如果这个服务没有运行方法将通过调用onCreate方法去创建这个服务但并不调用onStart方法来启动它。相反,onBind方法将被客户端的Intent调用,并且它返回一个IBind对象以便客户端稍后可以调用这个服务。同一服务被客户端同时启动和绑定是很正常的。
onDestroy 与Activity一样,当一个服务被结束是onDestroy方法将会被调用。当没有客户端启动或绑定到一个服务时Android将终结这个服务。与很多Activity时的情况一样,当内存很低的时候Android也可能会终结一个服务。如果这种情况发生,Android也可能在内存够用的时候尝试启动被终止的服务,所以你的服务必须为重启持久保存信息,并且最好在onStart方法内来做。
上面这段文章翻译自: Android Application Development O'Reilly May 2009: First Edition ISBN: 978-0-596-52147-9 by Rick Rogers, John Lombardo, Zigurd Mednieks, and Blake Meike


补充一点:

Android中BindService方式使用的理解

BindService和Started Service都是Service,有什么地方不一样呢:

1. Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行【onCreate()- >onStartCommand()->startService()->onDestroy()】,注意其中没有onStart(),主要是被onStartCommand()方法给取代了,onStart方法不推荐使用了。

2. BindService中使用bindService()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就终止了【onCreate()->onBind()->onUnbind()->onDestroy()】。

调用者Activity:

MainAcitvity

服务BindService

BindService

由于Android 中的Service使用了onBind 的方法去绑定服务,返回一个Ibinder对象进行操作,而我们要获取具体的Service方法的内容的时候,我们需要Ibinder对象返回具体的Service对象才能操作,所以说具体的Service对象必须首先实现Binder对象,这个样子的话我们才能利用bindService的方法对Service进行绑定,获取Binder对象之后获取具体的Service对象,然后才获取Service中的方法等等。所以我们需要注意的是bindService的方式去绑定服务获取的必定是实现了Binder的对象,所以这是我们必须使用Binder的方式去获取Service的方式而不是直接使用Service的类,这个是Android内部实现所约束的。

方法过程如下:

Intent intent = new Intent(MainActivity.this,BindService.class)->新建了BindService对象->新建了MyBinder对象

->bindService(intent, conn, Context.BIND_AUTO_CREATE);->onBind()函数 -----传递MyBinder对象------->onServiceConnected()

--> 通过传递的Binder对象获取刚刚和Binder对象对应的BindService 对象  -->调用Service中定义的方法。

这个其中必须通过Binder对象,因为是通过Binder对象来传递的,通过Binder对象获取Service对象,然后获取所需的服务,所以Service必须实现Binder,以便传递和使用。



更多相关文章

  1. 极光推送(守护进程)
  2. Android(安卓)中文设置成粗体的方法
  3. 在 Android(安卓)应用中使用数据库
  4. 面试例题4:绘制5行文本,每一行的字体大小逐渐增加
  5. Android(安卓)输入系统
  6. Android的移动存储解决方案之SharedPreferences
  7. 浅谈Java中Collections.sort对List排序的两种方法
  8. 类和 Json对象
  9. Python list sort方法的具体使用

随机推荐

  1. Arcgis for Android(安卓)开发环境配置(An
  2. JPush极光推送Java服务器端API
  3. android 通过广播获取指定联系人短信内容
  4. android经典优化点
  5. 2013.12.04 (4)——— android SlidingMenu
  6. 两个界面的切换
  7. Local Caching of Remote Images in AIR
  8. Android应用程序键盘(Keyboard)消息处理机
  9. Android中直接按路径读取properties文件
  10. 启动虚拟机出现cannot launch AVD in emu