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 service生命周期

首先要

android service 生命周期

有了 Service 类我们如何启动他呢,有两种方法:       • Context.startService()       • Context.bindService() ...

Android Service生命周期及用法!

Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行...

android service和生命周期

作为一款多任务操作系统,如果不能运行后台服务,显然说不过去,Android 当然提供了运行后台程序的方法。而且非常简单易用,只不过有一些小问题需要注意,这个主题分为两部分,第一部分是如何实现一个Ser...

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

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

Android复习之旅--Activity/Service/Fragment 生命周期

Activity/Service/Fragment的生命周期
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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