引言
应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁。在这期间,他们有时候处于激活状态,有时候处于非激活状态;对于活动,对用户有时候可见,有时候不可见。组件生命周期将讨论活动、服务、广播接收者的生命周期——包括在生命周期中他们可能的状态、通知状态改变的方法、及这些状态的组件寄宿的进程被终结和实例被销毁的可能性。
上篇Android开发之旅:组件生命周期(一)讲解了论活动的生命周期及他们可能的状态、通知状态改变的方法。本篇将介绍服务和广播接收者的生命周期:
1、服务生命周期
一个服务可以用在两个方面:
- 它可以启动且允许一直运行直到有人停止它,或者它自己停止。在这种模式,通过调用Context.startService()启动服务及通过调用Context.stopService()停止服务。服务也可以通过调用Service.stopSelf()或Service.stopSelfResult()停止自己。仅需要调用一次stopService()停止服务,而不管调用startService()了多少次。
- 通过使用相关接口可以编程地操作服务。客户端建立与Service对象的一个连接及使用该连接调入服务。连接通过调用Context.bindService()建立,通过调用Context.unbindService()关闭。多个客户端可以绑定到同一个服务。如果服务尚未启动,bindService()可以选择启动它。
这两种模式并不是完全分离的。你可以绑定到一个用startService()启动的服务。例如,一个后台音乐服务可以通过使用定义了音乐播放的Intent对象调用startService()启动。直到后来,用户可能想对播放器做一些控制或者获取当前歌曲的一些信息,一个活动将调用bindService()与服务建立连接。在这种情况下,实际上直到最后一个绑定关闭stopService()并不会停止。
像活动一样,一个服务也有生命周期方法,你可以执行监视它的状态改变。但是比活动的生命周期方法更少,只有三个且它们是公有的(public)而不是受保护的(protected)(说明:活动的生命周期方法是protected的):
-
void onCreate()
-
void onStart(Intent intent)
-
void onDestory()
通过这三个方法,你可以监视服务生命周期的两个嵌套循环:
-
服务的整个生命时间(entire lifetime),从调用onCreate()到相应地调用onDestory()。像一个活动一样,服务在onCreate()中做一些初始设置,且在中释放所有的资源。例如,一个音乐播放服务可以在onCreate()中创建线程,然后在onDestory()中停止线程。
-
服务的活跃生命时间(active lifetime),从调用onStart()开始。这个方法传递参数是传送给startService()的Intent对象。音乐服务将打开Intent,了解播放哪个音乐并且开始播放。
没有相应的回调方法,因为服务停止没有onStop()方法。
startService()和onDestory()被所有服务调用,不管是通过Context.startService()启动还是通过Context.bindService()启动的。然而,onStart()仅被通过startService()启动的服务调用。
如果一个服务允许别的绑定到它,有一些额外的回调方法来实现它:
-
IBinder onBind(Intent intent)
-
boolean onUnbind(Intent intent)
-
void onRebind(Intent intent)
onBind()回调传递的参数是传给bindService()的Intent对象,onUnbind()回调传递的参数是传给unbindService()的Intent对象。如果服务允许绑定,onBind()返回客户端与服务交互的通信通道。onUnbind()方法可以要求调用onRebind(),如果一个新的客户端连接到服务。
下图解释了服务的回调方法。虽然,它分离了由startService()启动的服务和由bindService()启动的服务,记住任何服务,无论它怎么启动的,都可能允许客户端绑定到它,因此任何服务可能接收onBind()和onUnbind()调用。
2、广播接收者生命周期
一个广播接收者有一个回调方法:void onReceive(Context curContext, Intent broadcastMsg)。当一个广播消息到达接收者是,Android调用它的onReceive()方法并传递给它包含消息的Intent对象。广播接收者被认为仅当它执行这个方法时是活跃的。当onReceive()返回后,它是不活跃的。
有一个活跃的广播接收者的进程是受保护的,不会被杀死。但是系统可以在任何时候杀死仅有不活跃组件的进程,当占用的内存别的进程需要时。
这带来一个问题,当一个广播消息的响应时费时的,因此应该在独立的线程中做这些事,远离用户界面其它组件运行的主线程。如果onReceive()衍生线程然后返回,整个进程,包括新的线程,被判定为不活跃的(除非进程中的其它应用程序组件是活跃的),将使它处于被杀的危机。解决这个问题的方法是onReceive()启动一个服务,及时服务做这个工作,因此系统知道进程中有活跃的工作在做。
分享到:
相关推荐
每个组件都有其独特的生命周期,理解并熟练掌握这些生命周期对于开发高效、稳定的Android应用至关重要。 首先,Activity作为用户界面的主要载体,其生命周期包括创建(onCreate)、启动(onStart)、可见(onResume...
Android开发之旅:组件生命周期(二) 9 Android开发之旅:组件生命周期(三) 10 Android 开发之旅:又见Hello World!11 Android 开发之旅:深入分析布局文件&又是“Hello World!” 12 Android 开发之旅:...
在Android应用开发中,四大组件是构建应用程序的基础,它们分别是Activity、Service、BroadcastReceiver和ContentProvider,还有Intent作为组件间通信的重要桥梁。下面我们将逐一详细解释这些组件。 **Activity详解...
在Android应用开发中,管理Activity和Fragment的生命周期是至关重要的,因为这直接影响到应用的性能、内存使用以及用户体验。"Android-Android轻松实现生命周期绑定"的主题着重于如何更有效地处理这些组件的生命周期...
### Android四大基本组件及其生命周期详解 #### 一、Android四大基本组件概述 Android四大基本组件是Android应用程序的核心组成部分,它们分别是Activity、Service、ContentProvider和BroadcastReceiver。这四个...
这篇博客文章“Android开发 - Activity生命周期”(链接:https://zzqrj.iteye.com/blog/1124449)可能详细讲解了Activity在不同状态之间的转换及其对程序行为的影响。 Activity生命周期主要涉及以下几个关键状态:...
在"Android开发-其它杂项"这个标签下,我们看出Disposer可能不是Android开发中的核心部分,但它是解决特定问题——即RxJava生命周期管理——的一种实用工具。这个标签强调了Disposer作为Android开发中一个辅助类库的...
在Android应用开发中,了解和掌握Android生命周期是至关重要的,因为这直接影响到应用程序的性能、稳定性和用户体验。本文将深入探讨“Android生命周期Demo”,并基于《第一...这将为后续的Android开发打下坚实的基础。
在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,即使用户离开了应用程序,Service仍可继续运行。Service的生命周期是其核心概念,理解并掌握Service的生命周期对于编写高效、稳定的...
本资料包"Android应用源码之android Widget小组件开发.zip"提供了一套完整的源代码示例,帮助开发者深入理解和实践Android Widget的创建过程。以下是对这个主题的详细讲解: 1. **Android Widget概述** Android ...
总之,理解Activity的生命周期是Android开发的基础,而`ActionBarCompat`则提供了在老版本Android设备上实现现代界面设计的途径。通过实践这些例子,开发者能够更好地优化他们的应用,提供一致且流畅的用户体验。
在Android应用开发中,网络请求是必不可少的一部分,而有效地管理和处理网络请求的生命周期可以避免内存泄漏、提高用户体验。本文将详细介绍如何使用RxJava2、Retrofit2和RxLifecycle2这三款强大的工具来构建一个...
在Android应用开发中,理解并掌握Android生命周期是至关重要的。Android生命周期是指一个Activity、Service、BroadcastReceiver或ContentProvider从创建到销毁的过程。每个组件都有其特定的生命周期方法,开发者需要...
在开发中,理解四大组件的特性和生命周期,能帮助开发者合理设计应用架构,实现功能间的有效协作,并确保应用在不同场景下的正确运行。此外,还需要注意组件间的通信安全和性能优化,例如避免内存泄漏和过度绘制,以...
Android 应用程序的生命周期是开发过程中至关重要的概念,它涉及到进程和组件的管理,以及系统如何根据资源需求和用户交互来决定何时启动、暂停、恢复或终止它们。本实验报告将深入探讨Android应用程序,尤其是...
【标题】"Treasure MVP 改型2 RXJava2 Rxandroid Okhttp3 生命周期(Android架构组件),谷歌模式.zip" 涉及的关键知识点是Android应用开发中的架构设计、响应式编程以及网络请求处理。这个开源项目显然采用了MVP...
demo包含测试service的生命周期走向,service的启动,停止,绑定,取消绑定,以及IntentService的生命周期走向测试和IntentService与访问者信息通信过程,不清楚之处请参阅我的博客《Android开发四大组件之Service...
理解 Activity 生命周期是 Android 开发的基础,掌握了 Activity 生命周期,可以更好地开发 Android 应用程序。 在实际开发中,我们可以使用 Log debugging 来追踪 Activity 的生命周期,可以在每个生命周期方法中...
在Android应用开发中,理解并妥善管理Activity和Fragment的生命周期是至关重要的。为了帮助开发者更有效地跟踪和控制这些组件的状态,出现了一类被称为"生命周期监听工具库"的辅助工具,如"Android-Android生命周期...
新的Android体系结构组件生命周期许可的RxComponentLifecycle Rx绑定版权所有2017 Florent37,Inc.受Apache许可,版本2.0(“许可”)许可; 您不得使用此文件,除非是新的Android体系结构组件生命周期许可证的...