`
warnerhit
  • 浏览: 123767 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)android Service 服务的生命周期——四大组件之Service

阅读更多

(转)android Service 服务的生命周期——四大组件之Service 

 

1、Service的概念  
2、Service的生命周期  

3、实例:控制音乐播放的Service

 

一、Service的概念

Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。

1.jpg

 

二、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方法内来做

分享到:
评论

相关推荐

    安卓四大组件——Service(服务)

    在Android开发中,四大组件是应用程序的核心组成部分,它们分别是Activity(活动)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)以及我们今天重点关注的Service(服务)。Service组件在后台...

    Android学习之路——7.Service

    在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨“Android学习之路——7.Service”,分析Service的基本概念、使用方式以及常见应用场景,同时结合...

    android各组件详解- Service

    Service是Android四大组件之一,其主要功能是在后台执行长时间运行的操作,而不与用户进行直接交互。这种组件非常适合于执行后台任务,如下载、上传数据、播放音乐、执行定时任务等。Service运行在应用程序进程的...

    Android后台开启服务默默拍照

    Android Service是Android四大组件之一,它允许应用在没有用户交互的情况下运行,这对于需要长时间运行的任务非常有用。在这个场景中,我们讨论的是如何在后台启动一个服务来执行拍照操作。 首先,我们需要创建一个...

    Android生命周期

    接着,Android的四大组件是构建应用的基础: 1. Activity:它是用户界面的呈现层,负责显示可视化界面并处理用户交互。一个应用可以有多个Activity,通常启动时会展示一个Activity作为入口。Activity的生命周期包括...

    Android项目设计与开发:服务的概念.ppt

    嵌入式Android项目设计与开发 第八章 服务 —— 服务的概念 服务的概念 服务(Service)是Android中的四大组件之一,它能够长期在后台运行且不提供用户界面。即使用户切到另一应用程序,服务仍可以在后台运行。 服务...

    ServiceDemo

    ServiceDemo 是一个与Android开发相关的项目,主要展示了Android四大组件之一——Service的使用。Service是Android系统中的一个重要组件,用于在后台执行长时间运行的操作而无需用户交互。在本项目中,开发者可能...

    Android源码——小米系统之便签源码.7z

    4. **内容提供者(Content Provider)**:如果便签应用支持与其他应用共享数据,那么可能会用到Content Provider,这是Android四大组件之一,用于不同应用间的数据交换。 5. **Android生命周期**:在源码中,可以...

    安卓四大组件——BroadcastReceiver(广播)

    在Android系统中,四大组件是应用开发的核心组成部分,它们分别是:Activity、Service、Content Provider以及我们今天要讨论的BroadcastReceiver(广播接收器)。BroadcastReceiver是一种轻量级组件,用于接收并响应...

    Android中文翻译组——Android中文API合集(3).zip_android_手册

    1. **组件**:Android应用由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。Activity是用户界面的入口,负责与用户交互;Service则在后台运行...

    Android私密记事本

    "Android私密记事本"是一个典型的Android应用程序,它利用了Android平台的核心组件——四大组件,为用户提供了一个安全、便捷的记录生活点滴的工具。本文将深入探讨这一应用程序背后的技术原理,主要围绕四大组件...

    Android源码——生活手册源码.zip

    4. **Android组件**:Android系统由四大组件构成:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供者(Content Provider)。理解它们的用途和交互方式是Android开发的基础。 5. **...

    android\深入Android 组件入门

    在深入探讨Android组件之前,首先理解Android系统的基石之一——组件化设计。组件是Android应用程序的基础构建块,它们各自承担特定的任务,并通过明确的接口与其他组件交互。这种组件化设计允许开发者将应用程序...

    安卓Android源码——andricoFacebook客户端.zip

    Android应用主要由四大组件构成:Activity、Service、BroadcastReceiver和ContentProvider。在andricoFacebook客户端中,这四大组件如何协同工作,以实现用户界面交互、后台服务处理、消息广播接收以及数据共享等...

    安卓Android源码——(游戏视图与系统组件).zip

    开发者可以通过学习这些内容,进一步了解如何在游戏中使用`SurfaceView`或`TextureView`进行高效的图形绘制,以及如何设计和集成安卓系统的四大组件,以实现更加健壮和功能丰富的应用。 为了提升游戏性能,开发者还...

    安卓Android源码——PixelTowers.zip

    Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)。PixelTowers项目中的源码很可能包含了这些组件的实现,我们可以从中学习...

    Android开发——从小工到专家(书签)

    ContentProvider用于在不同应用间共享数据,是Android四大组件之一。掌握如何创建和使用ContentProvider,能够实现跨应用的数据交换。 八、碎片(Fragment) Fragment是用于构建可重用的UI模块,尤其在多屏幕适配中...

    安卓Android源码——应用开发揭秘源码.zip

    首先,Android应用开发的基础在于对Android SDK的理解,包括Android的四大组件(Activity、Service、BroadcastReceiver、ContentProvider)以及Intent机制。源码中会展示这些组件的实现细节,例如Activity的生命周期...

    安卓Android源码——FindNiwei.rar

    Android应用主要由Activity、Service、BroadcastReceiver、ContentProvider四大组件构成,它们是Android应用程序设计的核心。通过阅读源码,我们可以了解这些组件的生命周期、相互间的交互以及如何在不同场景下使用...

    Android源码——豆瓣手机客户端源码.7z

    Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。豆瓣客户端的源码中,我们可以看到这些组件如何协同工作,为用户提供流畅的...

Global site tag (gtag.js) - Google Analytics