【移动应用开发技术】Android Service的生命周期2_第1页
【移动应用开发技术】Android Service的生命周期2_第2页
【移动应用开发技术】Android Service的生命周期2_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】AndroidService的生命周期2

有了Service类我们如何启动他呢,有两种方法:

Context.startService()

Context.bindService()

1.

在同一个应用任何地方调用startService()方法就能启动Service了,然后系统会回调Service类的onCreate()以及onStart()方法。这样启动的Service会一直运行在后台,直到Context.stopService()或者selfStop()方法被调用。另外如果一个Service已经被启动,其他代码再试图调用startService()方法,是不会执行onCreate()的,但会重新执行一次onStart()。

2.另外一种bindService()方法的意思是,把这个Service和调用Service的客户类绑起来,如果调用这个客户类被销毁,Service也会被销毁。用这个方法的一个好处是,bindService()方法执行后Service会回调上边提到的onBind()方发,你可以从这里返回一个实现了IBind接口的类,在客户端操作这个类就能和这个服务通信了,比如得到Service运行的状态或其他操作。如果Service还没有运行,使用这个方法启动Service就会onCreate()方法而不会调用onStart()。

总结:

1.startService()的目的是回调onStart()方法,onCreate()方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate()方法。

2.

bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作),一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。

由于Service的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。

如果我们想保持和Service的通信,又不想让Service随着Activity退出而退出呢?你可以先startService()然后再bindService()。当你不需要绑定的时候就执行unbindService()方法,执行这个方法只会触发Service的onUnbind()而不会把这个Service销毁。这样就可以既保持和Service的通信,也不会随着Activity销毁而销毁了。

Android系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的Service碰上了这种情况,多半会先被杀掉。但如果你增加Service的优先级就能让他多留一会,我们可以用setForeground(true)来设置Service的优先级。

为什么是foreground?默认启动的Service是被标记为background,当前运行的Activity一般被标记为foreground,也就是说你给Service设置了foreground那么他就和正在运行的Activity类似优先级得到了一定的提高。当让这并不能保证你得Service永远不被杀掉,只是提高了他的优先级。

摘自网络其他资料:关于Service生命周AndroidService生命周期与Activity生命周期是相似的,但是也存在一些细节上也存在着重要的不同:onCreate和onStart是不同的通过从客户端调用Context.startService(Intent)方法我们可以启动一个服务。如果这个服务还没有运行,Android将启动它并且在onCreate方法之后调用它的onStart方法。如果这个服务已经在运行,那么它的onStart方法将被新的Intent再次调用。所以对于单个运行的Service它的onStart方法被反复调用是完全可能的并且是很正常的。onResume、onPause以及onStop是不需要的回调一个服务通常是没有用户界面的,所以我们也就不需要onPause、onResume或者onStop方法了。无论何时一个运行中的Service它总是在后台运行。onBind如果一个客户端需要持久的连接到一个服务,那么他可以调用Context.bindService方法。如果这个服务没有运行方法将通过调用onCreate方法去创建这个服务但并不调用onStart方法来启动它。相反,onBind方法将被客户端的Intent调用,并且它返回一个IBind对象以便客户端稍后可以调用这个服务。同一服务被客户端同时启动和绑定是很正常的。onDestroy与Activity一样,当一个服务被结束是onDestroy方法将会被调用。当没有客户端启动或绑定到一个服务时Android将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论