Android应用的生命周期
在大多数情况下,每个Android应用都运行在各自的Linux进程中。该进程在此应用的代码需要
运行时被创建出来,并且保持运行直到系统需要回收内存给其它应用使用。
一个重要而且不同以往的特征是Android应用的进程的生死不是由应用自己控制的。系统通过综合
考虑正在运行的应用的组成,对用户的重要性,系统剩余内存等来决定进程的生死。
搞明白应用组件(特别是Activity, Service和IntentReceiver)对应用的进程的生死的影响很
重要。错误使用这些组件会导致应用的进程在做重要工作的时候被杀死。
一个常见的进程生命期Bug的例子是当IntentReceiver在onReceiveIntent()方法收到一个Intent
后启动一个线程,然后从方法中返回。一旦方法返回,系统考虑到IntentReceiver不再活动,那么
相应的进程就不是必须的了(除非其它应用组件激活它)。因此该进程可能在任何时间被杀死
以回收内存,从而导致开启的线程被终止。要解决这个问题就要在IntentReceiver中开启一个Service
,让系统知道该进程还有工作要处理。
Android按照进程中的正在运行的组件及其组件状态将进程放入重要性分层结构中,当内存不够时决定
哪些进程将被杀死。按重要性顺序:
1. 前台进程。持有屏幕最上面的用户正在交互的Activity的进程(它的onResume()方法被调用)或者正在
运行的IntentReceiver进程(它的onReceiveIntent()方法被执行)。这将会保持很少的进程在系统中,
并且这仅会杀死最后一次内存重整以来由于内存低而不能保持运行的进程。通常设备会在此点进入
内存页面交换状态,这个动作是保证用户交互的相应性而必须的。
2. 可见进程。持有在用户的屏幕上可见的Activity的进程,但不在最前面(它的onPause()方法被调用)。例如,
当前端activity显示一个对话框导致前一个activity被置于后面。除非为了保持前端的进程运行,
否则可见进程就是最重要的。
3. 服务进程。Service在startService()方法中启动的进程。虽然这些进程对用户不直接可见,但是
他们通常是用户关心的事情(如后台MP3播放或后台网络上传或下载),因此系统将保持这些进程
除非内存不能满足所有前端进程和可见进程)
4. 后端进程。持有对当前用户不可见的Activity的进程(它的的onStop()方法被调用)。
这些进程不直接影响用户的体验。提供它们是让activity的生命周期正确(详见Activity)
,系统可以在任何时间为了保证前面三种类型的进程而杀死此类进程。通常有很多进程在
运行,它们被保持在一个LRU列表中从而保证在内存过低之前有最多的进程对用户可见。
5. 空进程。不持有任何活动的应用组件。存在的原因是为了提高下一个程序组件启动速度。
因此系统经常杀死此类进程确保空进程占用的系统资源和底层内核占用的资源平衡。
当决定如何分类一个进程时,系统会收集当前活动进程包含的所有组件的重要水平。参见Activity
Service和IntentReceiver文档获取更详细的组件对进程生命周期的影响信息。这些类的文档
详细描述了它们对应用生命周期的影响。
分享到:
相关推荐
android 应用程序的生命周期 课件
在Android应用开发中,了解和掌握Android生命周期是至关重要的,因为这直接影响到应用程序的性能、稳定性和用户体验。本文将深入探讨“Android生命周期Demo”,并基于《第一行代码》这本书中的讲解,帮助新手开发者...
#### 五、Android应用生命周期管理 Android应用由多个组件构成,每个组件都有自己的生命周期。了解各个组件的生命周期对于优化应用性能至关重要。 - **Activity生命周期**:包括onCreate()、onStart()、onResume()...
这对于在Android应用中安全地使用RxJava至关重要。 在"Android开发-其它杂项"这个标签下,我们看出Disposer可能不是Android开发中的核心部分,但它是解决特定问题——即RxJava生命周期管理——的一种实用工具。这个...
在Android应用开发中,管理Activity和Fragment的生命周期是至关重要的,因为这直接影响到应用的性能、内存使用以及用户体验。"Android-Android轻松实现生命周期绑定"的主题着重于如何更有效地处理这些组件的生命周期...
本实验报告将深入探讨Android应用程序,尤其是Activity、Service和Intent Receiver的生命周期,并解释如何正确管理这些组件以避免不必要的进程销毁。 首先,Android应用通常在独立的Linux进程中运行。当应用需要...
在Android开发中,View是构建用户界面的基本元素,它的生命周期管理对于优化性能和避免资源浪费至关重要。本篇文章将深入探讨Android View的...同时,掌握这些知识点有助于开发者编写出更加健壮和高效的Android应用。
在Android应用开发中,理解并掌握Android生命周期是至关重要的。Android生命周期是指一个Activity、Service、BroadcastReceiver或ContentProvider从创建到销毁的过程。每个组件都有其特定的生命周期方法,开发者需要...
对android应用程序的生命周期有一个很详细的介绍,非常适合初学者
理解并熟练掌握Fragment的生命周期对于编写健壮且高效的Android应用至关重要,它能帮助开发者处理好用户交互、资源管理以及状态保存等问题。通过实际操作和测试,可以更好地理解和记忆这些概念,避免理论与实践之间...
理解 Activity 生命周期是 Android 开发的基础,掌握了 Activity 生命周期,可以更好地开发 Android 应用程序。 在实际开发中,我们可以使用 Log debugging 来追踪 Activity 的生命周期,可以在每个生命周期方法中...
在Android应用开发中,Activity是用户界面的基本单元,它的生命周期是开发者必须要深入理解的重要概念。这个"Android生命周期的演示程序"旨在帮助我们直观地了解Activity从创建到销毁的各个阶段,以及在不同操作下...
Android 生命周期管理是 Android 应用程序开发中一个非常重要的概念,涉及到 Activity 的生命周期管理,包括 Activity 的创建、启动、停止、销毁等过程。在 Android 中,Activity 可能会因为不同的原因而被销毁,...
在Android应用开发中,Activity是用户界面的基本单元,它负责展示屏幕上的内容并处理用户交互。Activity的生命周期是Android开发者必须深入理解的关键概念,因为它直接影响到应用的性能、内存管理和用户体验。本文将...
总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android应用至关重要。开发者应熟练掌握这些知识点,以便在设计和调试应用时能得心应手。通过实践和分析ActivityDemo,...
总之,理解和熟练掌握Fragment的生命周期对于开发Android应用至关重要,它能够帮助我们构建出更加高效、响应迅速且用户体验良好的应用。在实际开发中,要根据具体需求灵活运用,确保Fragment的正确管理和有效通信。
Service的生命周期是其核心概念,理解并掌握Service的生命周期对于编写高效、稳定的Android应用至关重要。 Service的生命周期主要分为两个启动模式:bindService和startService。这两种方式对Service的生命周期有着...
### Android 生命周期整合详解 #### 一、Android 生命周期概述 Android 应用程序主要由四大组件构成:Activity(用户界面)、Service(后台服务)、BroadcastReceiver(广播接收器)以及ContentProvider(数据共享...
在Android应用开发中,Activity是用户界面的基本单元,它负责展示屏幕上的内容并处理与用户的交互。本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化...
在Android应用开发中,理解并熟练掌握Android组件(如Activity)的生命周期至关重要。生命周期是指一个组件从创建到销毁的整个过程,它涉及到一系列方法的调用,这些方法定义了组件在不同状态之间的转换。本例将深入...