Android Service 生命周期

转载 2013年12月04日 18:14:42

Android Service 生命周期可以促使移动设备的创新,让用户体验到最优越的移动服务,只有broadcast receivers执行此方法的时候才是激活的,当 onReceive()返回的时候,它就是非激活状态。

如果没有程序停止它或者它自己停止,service将一直运行。在这种模式下,service开始于调用Context.startService() ,停止于Context.stopService(). service可以通过调用Android Service 生命周期() 或 Service.stopSelfResult()停止自己。不管调用多少次startService() ,只需要调用一次 stopService() 就可以停止service

可以通过接口被外部程序调用。外部程序建立到service的连接,通过连接来操作service。建立连接调开始于Context.bindService(), 结束于Context.unbindService(). 多个客户端可以绑定到同一个service,如果service没有启动, bindService() 可以选择启动它。

这2种模式不是完全分离的。你可以可以绑定到一个通过startService()启动的服务。如一个intent想要播放音乐,通过startService() 方法启动后台播放音乐的service。然后,也许用户想要操作播放器或者获取当前正在播放的乐曲的信息,一个activity就会通过bindService()建立一个到此service的连接. 这种情况下 stopService() 在全部的连接关闭后才会真正停止service

像activity一样, service也有可以通过监视状态实现的生命周期。但是比activity要少――只有3个――而且是public的而不是protected的

  1. void onCreate()   
  2. void onStart(Intent intent)   
  3. void onDestroy() 

通过实现这3个方法,可以监视service生命周期的2个嵌套循环:

整个生命周期 从onCreate() 开始,从onDestroy() 结束,像activity一样, a Android Service 生命周期在 onCreate()中执行初始化操作,在 onDestroy()中释放所有用到的资源。如:后台播放音乐的service可能在 onCreate()创建一个播放音乐的线程,在onDestroy()中销毁这个线程。

活动生命周期 开始于 onStart(). 这个方法处理传入到startService()方法的intent。 音乐服务会打开intent查看要播放哪首歌曲,并开始播放。当服务停止的时候,没有方法检测到――没有 onStop() 方法,onCreate() 和 onDestroy() 用于所有通过Context.startService() or Context.bindService() 启动的service。onStart() 只用于通过startService()开始的service

如果一个Android Service 生命周期是可以从外部绑定的,它就可以触发以下的方法:

  1. IBinder onBind(Intent intent)   
  2. boolean onUnbind(Intent intent)   
  3. void onRebind(Intent intent) 

onBind() 回调被传递给调用bindService 的intent, onUnbind() 被unbindService()中的intent处理。如果服务允许被绑定。那么onBind() 方法返回客户端和sercie的沟通通道。如果一个新的客户端连接到服务,onUnbind() 会触发onRebind() 调用。

下面的图表说明了sercice的回调方法。下面的图片将通过 startService 和通过bindService()启动的service分开了,但是要注意不管他们怎么启动的,都有可能被客户端连接,因此都有可能触发到onBind() 和 onUnbind() 方法。

当经过receiver 请求,broadcast message到达的时候, Android 调用持有message的intent的 onReceive() 方法,只有broadcast receivers执行此方法的时候才是激活的,当 onReceive()返回的时候,它就是非激活状态

一个含有激活的broadcast receiver的进程是不会被中止的。但是只含有非激活组件的进程在它占用的内存被其他程序请求的时候,任何时间都可以被中止。 当响应broadcast message的程序因为消耗很多时间而在另外一个线程 而非UI所在的线程处理的时候会出现一个问题。

当 onReceive() 开启一个线程并返回后,整个程序(包括新建的线程)状态是非激活的(除非此进程中有其他激活的组件), 因此这个进程就有被中止的危险。解决这个问题的办法是onReceive() 方法启动一个Android Service 生命周期,让sercie去做耗时的工作,这样系统就知道此进程中还有活动的工作。

 

Android中startService的使用及Service生命周期

Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯startService的使用,不涉...
  • sunqunsunqun
  • sunqunsunqun
  • 2015年08月16日 00:10
  • 20400

Android:Service生命周期最全面解析

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service最基础的知识:Service的生命周期 如果你对Service还未了解,建议先阅读我写的文章: ...
  • carson_ho
  • carson_ho
  • 2016年11月14日 16:15
  • 2085

【Android笔记】Service的生命周期

Andriod中Service的生命周期1. Service生命周期1)  可以通过调用Context.startService()启动一个Service,这可能会触发Service的onCreate...
  • ddna
  • ddna
  • 2009年12月11日 14:56
  • 9659

Service的生命周期与Activity生命周期区别

Service的生命周期与Activity生命周期区别        组件的生命周期         应用程序组件都有一个生命周期,从响应Intent的Android实例开始到这个实例被销...
  • sunjn_jz
  • sunjn_jz
  • 2015年09月24日 17:44
  • 537

Android Activity,Service(含IntentService)的生命周期详解

Android Activity和service的生命周期介绍以及注意事项,初学者应该尽早掌握,面试中也有经常问到...
  • qq_22118507
  • qq_22118507
  • 2016年05月15日 19:29
  • 2489

Android Service两种启动方式及 生命周期

onStart()后调用bindService该service则调用onBind(),调用onBind以后调stopService将无法释放该service必须再调unbindService才触发on...
  • hezuco
  • hezuco
  • 2014年03月22日 01:20
  • 3895

android IntentService生命周期问题

如果需要在onHandleIntent之前执行一些操作,比如需要停止当前正在执行的任务,可在onStart做这个操作, 需要注意的是必须在onStart函数的最后(执行完我的操作后)调用super....
  • vipycm
  • vipycm
  • 2015年03月14日 22:24
  • 1560

Android中bindService的使用及Service生命周期

Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及...
  • sunqunsunqun
  • sunqunsunqun
  • 2015年09月02日 01:06
  • 14687

Android中服务(Service)的的生命周期,两种开启服务的方式的不同点,Service与Activity之间的通讯

工作内容: 1.Service的生命周期(bindService,startService的区别) 2.Service与Activity之间的通讯方式 学习分享: 准备:定义服务类继承自Service...
  • yingtian648
  • yingtian648
  • 2016年10月18日 15:14
  • 753

Android之Service详解

与前一篇Android之Activity的细枝末节是同一系列的文章,是自己在学习和研发过程中,对Service的一些知识点的总结,汇总得到这篇文章。这篇文章会从Service的一些小知识点,延伸到An...
  • xiaohanluo
  • xiaohanluo
  • 2016年12月16日 10:48
  • 4460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Service 生命周期
举报原因:
原因补充:

(最多只允许输入30个字)