`

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 永远不被杀掉,只是提高了他的优先级。

注意:调用bind启动service虽然不会调用onStart,但会调用onStartCommand
分享到:
评论

相关推荐

    spring中service生命周期(xml/annotation)

    在Spring框架中,Service层是业务逻辑的核心...以上就是关于Spring中Service生命周期的管理和配置,包括XML和注解方式的详细介绍。通过理解和熟练掌握这些知识,开发者能够更好地设计和维护Spring应用中的业务逻辑层。

    Activity和Service生命周期及使用AIDL通信实例备份

    本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    Android Service生命周期及用法!

    `onDestroy()`则在Service被停止时调用,标志着Service生命周期的结束。值得注意的是,Service的生命周期管理需要谨慎处理,以避免内存泄漏和不必要的资源消耗。 Service与Activity之间的通信是通过Binder机制实现...

    Android说明Service生命周期的代码例子

    Service生命周期的理解和正确管理对于优化应用程序性能至关重要。以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要...

    Android-Service生命周期及用法最新版本

    本文档主要讲述的是 Android Service生命周期及用法;Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),...

    android项目教程Service生命周期.pptx

    - 未绑定Activity的Service生命周期图显示了startService()启动的过程,而绑定Activity的Service生命周期图则展示了bindService()启动的过程,两者在生命周期上有显著差异。 理解并熟练掌握Service的生命周期及其...

    AndroidService生命周期及用法[收集].pdf

    使用`startService()`方法启动Service,这会导致Service生命周期中的`onStartCommand()`被调用。若要停止Service,可以调用`stopService()`。需要注意的是,即使调用了`stopService()`,Service可能并不会立即停止,...

    Android中Service生命周期演示案例的任务要求.pdf

    6. **Service生命周期**: Service的生命周期包括`onCreate()`, `onStartCommand()`, `onBind()`, `onUnbind()`, `onDestroy()`等关键方法。在创建Service时,会调用`onCreate()`,接着如果是通过`startService()`...

    android Service的生命周期

    总的来说,Android Service的生命周期管理是开发者必须掌握的关键技能,正确理解和使用Service生命周期能够确保应用的稳定性和效率,避免不必要的资源消耗。在开发过程中,我们还需要注意Service的权限管理,以及在...

    Android Service生命周期详解

    总的来说,Android Service生命周期管理涉及到一系列的回调方法,通过这些方法,开发者能够精确控制服务的启动、运行和终止,同时确保服务在正确的时间释放资源。合理地使用服务能提高应用的效率和用户体验。在实际...

    基于Android Service 生命周期的详细介绍

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

    Android中演示Service生命周期的代码清单.pdf

    本篇文章将详细阐述如何在Android中演示Service的生命周期,并提供相关的代码清单。 首先,Service的生命周期主要由四个主要方法组成:`onCreate()`, `onStartCommand()`, `onBind()`, 和 `onDestroy()`。当Service...

    Android中service基本用法,生命周期1

    startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和activity绑定后,和activity共存亡,activity...

    Android中Service的生命周期解析.pdf

    这是Service生命周期中的最后一个回调,开发者应在此处释放所有资源。 3. 启动服务(Started Service) 当通过startService()启动Service时,Service会在后台无限运行,直到调用stopService()或stopSelf()才会停止...

    ServiceLifecycle:Android Service生命周期

    理解并掌握Service生命周期对于开发高效、稳定的Android应用至关重要。 1. **Service的启动和绑定** - **启动(Start)**: 当通过startService()方法启动Service时,Service会经历onCreate() -> onStartCommand() ...

    service的生命周期以及启动方式

    本教程将深入探讨Service的生命周期及其启动方式,并结合一个求平均值的Demo进行讲解。 首先,我们来理解Service的生命周期。Service有四个主要状态:创建(Created)、启动(Started)、绑定(Bound)和销毁...

    Android组件的生命周期

    - **Service生命周期**: - `onCreate()`:Service首次创建时调用。 - `onStartCommand()`或`onBind()`:根据Service类型(启动型或绑定型),在Service启动时调用。 - `onDestroy()`:Service销毁前调用。 - **...

Global site tag (gtag.js) - Google Analytics