(转)android Service 服务的生命周期——四大组件之Service
1、Service的概念
2、Service的生命周期
3、实例:控制音乐播放的Service
一、Service的概念
Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。
二、Service的生命周期
Service对象不能自己启动,需要通过某个Activity、Service或者其他Context对象来启动。启动的方法有两种,Context.startService和Context.bindService()。两种方式的生命周期是不同的,具体如下所示。
Context.startService方式的生命周期:
启动时,startService –> onCreate() –> onStart()
停止时,stopService –> onDestroy()
Context.bindService方式的生命周期:
绑定时,bindService -> onCreate() –> onBind()
解绑定时,unbindService –>onUnbind() –> onDestory()
三、实例:控制音乐播放的Service
有了 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 的通信,又不想让 Service 随着 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。当你不需要绑定的时候就执行 unbindService() 方法,执行这个方法只会触发 Service 的 onUnbind() 而不会把这个 Service 销毁。这样就可以既保持和 Service 的通信,也不会随着 Activity 销毁而销毁了。
提高 Service 优先级
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的 Service 碰上了这种情况,多半会先被杀掉。但如果你增加 Service 的优先级就能让他多留一会,我们可以用 setForeground(true) 来设置 Service 的优先级。
为什么是 foreground ? 默认启动的 Service 是被标记为 background,当前运行的 Activity 一般被标记为 foreground,也就是说你给 Service 设置了 foreground 那么他就和正在运行的 Activity 类似优先级得到了一定的提高。当让这并不能保证你得 Service 永远不被杀掉,只是提高了他的优先级。
摘自网络其他资料:关于Service生命周
Android Service生命周期与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将终结这个服务。与很多Activity时的情况一样,当内存很低的时候Android也可能会终结一个服务。如果这种情况发生,Android也可能在内存够用的时候尝试启动被终止的服务,所以你的服务必须为重启持久保存信息,并且最好在onStart方法内来做
分享到:
相关推荐
在Android开发中,四大组件是应用程序的核心组成部分,它们分别是Activity(活动)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)以及我们今天重点关注的Service(服务)。Service组件在后台...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨“Android学习之路——7.Service”,分析Service的基本概念、使用方式以及常见应用场景,同时结合...
Service是Android四大组件之一,其主要功能是在后台执行长时间运行的操作,而不与用户进行直接交互。这种组件非常适合于执行后台任务,如下载、上传数据、播放音乐、执行定时任务等。Service运行在应用程序进程的...
Android Service是Android四大组件之一,它允许应用在没有用户交互的情况下运行,这对于需要长时间运行的任务非常有用。在这个场景中,我们讨论的是如何在后台启动一个服务来执行拍照操作。 首先,我们需要创建一个...
接着,Android的四大组件是构建应用的基础: 1. Activity:它是用户界面的呈现层,负责显示可视化界面并处理用户交互。一个应用可以有多个Activity,通常启动时会展示一个Activity作为入口。Activity的生命周期包括...
嵌入式Android项目设计与开发 第八章 服务 —— 服务的概念 服务的概念 服务(Service)是Android中的四大组件之一,它能够长期在后台运行且不提供用户界面。即使用户切到另一应用程序,服务仍可以在后台运行。 服务...
ServiceDemo 是一个与Android开发相关的项目,主要展示了Android四大组件之一——Service的使用。Service是Android系统中的一个重要组件,用于在后台执行长时间运行的操作而无需用户交互。在本项目中,开发者可能...
4. **内容提供者(Content Provider)**:如果便签应用支持与其他应用共享数据,那么可能会用到Content Provider,这是Android四大组件之一,用于不同应用间的数据交换。 5. **Android生命周期**:在源码中,可以...
在Android系统中,四大组件是应用开发的核心组成部分,它们分别是:Activity、Service、Content Provider以及我们今天要讨论的BroadcastReceiver(广播接收器)。BroadcastReceiver是一种轻量级组件,用于接收并响应...
1. **组件**:Android应用由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。Activity是用户界面的入口,负责与用户交互;Service则在后台运行...
"Android私密记事本"是一个典型的Android应用程序,它利用了Android平台的核心组件——四大组件,为用户提供了一个安全、便捷的记录生活点滴的工具。本文将深入探讨这一应用程序背后的技术原理,主要围绕四大组件...
4. **Android组件**:Android系统由四大组件构成:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。理解它们的用途和交互方式是Android开发的基础。 5. **...
在深入探讨Android组件之前,首先理解Android系统的基石之一——组件化设计。组件是Android应用程序的基础构建块,它们各自承担特定的任务,并通过明确的接口与其他组件交互。这种组件化设计允许开发者将应用程序...
Android应用主要由四大组件构成:Activity、Service、BroadcastReceiver和ContentProvider。在andricoFacebook客户端中,这四大组件如何协同工作,以实现用户界面交互、后台服务处理、消息广播接收以及数据共享等...
开发者可以通过学习这些内容,进一步了解如何在游戏中使用`SurfaceView`或`TextureView`进行高效的图形绘制,以及如何设计和集成安卓系统的四大组件,以实现更加健壮和功能丰富的应用。 为了提升游戏性能,开发者还...
Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)。PixelTowers项目中的源码很可能包含了这些组件的实现,我们可以从中学习...
ContentProvider用于在不同应用间共享数据,是Android四大组件之一。掌握如何创建和使用ContentProvider,能够实现跨应用的数据交换。 八、碎片(Fragment) Fragment是用于构建可重用的UI模块,尤其在多屏幕适配中...
首先,Android应用开发的基础在于对Android SDK的理解,包括Android的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)以及Intent机制。源码中会展示这些组件的实现细节,例如Activity的生命周期...
Android应用主要由Activity、Service、BroadcastReceiver、ContentProvider四大组件构成,它们是Android应用程序设计的核心。通过阅读源码,我们可以了解这些组件的生命周期、相互间的交互以及如何在不同场景下使用...
Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。豆瓣客户端的源码中,我们可以看到这些组件如何协同工作,为用户提供流畅的...