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

Android文档阅读04—Application的生命周期

阅读更多

 许可协议:creativecommons licenses

 

在多数情况下, 每个Android应用运行在自己的Linux进程中. 当一个应用的某段code需要运行的时候这个进程将会被创建, 直到不再需要该应用或系统要为其他的应用释放内存的时候才停止.

 

一个非常重要且少有的特性是, 应用进程的存活时间不是由这个应用直接控制的. 而是由系统决定的, 系统会根据每个已知的正在运行的应用情况来定夺, 包括, 该应用对用户的重要性和系统全部可用内存.

 

对于开发人员来讲, 了解每个应用组件(尤其是, Activity, Service, 和IntentReceiver)对于应用进程存活时间的影响是非常重要的. 如果没有正确使用, 可能会导致应用进程在处理重要工作的时候被系统杀掉.

 

在对应用进程生命周期的理解中, 一个典型的错误就是当一个IntentReceiver 接收到Intent 之后, 会在自己的onReceiveIntent()方法中开起一个线程, 而后return这个方法. 一旦这个方法return, 系统会认为这个IntentReceiver 不在处于活跃状态, 也就认为他的宿主进程不再需要(除非还包有其他活跃的应用组件). 以至于当系统需要回收内存的时候会随时释kill掉这个进程, 中止其中的子线程. 解决这个问题的办法是在IntentReceiver中启动一个Service, 这样系统会知道在这个进程中还有活跃的任务需要完成.

 

为了决定在内存较低的时候杀掉哪个进程, Android会根据运行在这些进程内的组件及他们的状态把进程划分成一个"重要程度层次". 其重要的程度按以下规则排序:

  1. 前端进程可以是一个持有运行在屏幕最前端并与用户交互的Activity的进程(onResume方法被调用时),也可以是持有一个正在运行的IntentReceiver(也就是说他正在执行自己的onReceiveIntent方法)的进程. 在系统中, 只会有少数这样的进程, 并且除非内存已经低到不够这些进程运行, 否则系统不会主动杀掉这些进程. 这时, 设备通常已经达到了需要内存整理的状态, 所以杀掉这些进程是为了不让用户界面停止响应.
  2. 可视进程是持有一个被用户可见, 但没有显示在最前端 (onPause方法被调用时) 的Activity的进程. 举例来说, 这种进程通常出现在一个前端Activity以一个对话框出现并保持前一个Activity可见时. 这种进程被系统认为是极其重要的, 并且通常不会被杀掉, 除非为了保持所有前端进程正常运行不得不杀掉这些可见进程.
  3. 服务进程是持有一个Service的进程, 该Service是由startService()方法启动的, 尽管这些进程用户不能直接看到, 但是通常他们做的工作用户是十分关注的(例如, 在后台播放mp3或是在后台下载 上传文件), 所以, 除非为了保持所有的前端进程和可视进程正常运行外, 系统是不会杀掉服务进程的.
  4. 后台进程是持有一个不再被用户可见的Activity(onStop()方法被调用时)的进程. 这些进程不会直接影响用户体验. 加入这些进程已经完整的,正确的完成了自己的生命周期(访问Activity查看更多细节), 系统会在为前三种进程释放内存时随时杀掉这些后台进程. 通常会有很多的后台进程在运行, 所以这些进程被存放在一个LRU列表中, 以保证在低内存的时候, 最近一个被用户看到的进程会被最后杀掉.
  5. 空进程是没有持有任何活动应用组件的进程. 保留这种进程的唯一理由是为了提供一种缓存机制, 缩短他的应用下次运行时的启动时间. 就其本身而言, 系统杀掉这些进程的目的是为了在这些空进程和底层的核心缓存之间平衡整个系统的资源.

当需要给一个进程分类的时候, 系统会在该进程中处于活动状态的所有组件里掉选一个重要等级最高作为分类依据. 查看Activity, Service,和IntentReceiver的文档, 了解每个组件在进程整个生命周期中的贡献. 每一个classes的文档详细描述他们在各自应用的生命周期中所起得作用.

评论

相关推荐

    Android Application部分详解

    - **监听系统事件**:可以通过重写Application类的方法来监听应用程序的生命周期变化,比如在onCreate()方法中做一些初始化工作,在onTerminate()方法中做清理工作。 #### 二、使用Application类的方法 在实际...

    android系统文件application fundamentals翻译

    Application Fundamentals作为Android开发平台的重要文档,详尽地阐述了Android应用的基本构造、生命周期以及与其他组件的交互机制,是深入理解Android系统运作的关键。 一、Android应用程序结构 Android应用由一...

    Android API文档完整版

    主要组件有Lifecycle、ViewModel、LiveData、Room等,它们可以帮助开发者更好地管理组件的生命周期、数据持久化以及实现响应式编程。 10. **测试与性能优化**:Android API文档也包含测试框架(如JUnit、Espresso)...

    Android官方API文档完整版

    比如,`Activity`类是Android应用的基本单元,负责用户界面和生命周期管理;`Intent`类用于启动其他组件或传递数据,它是Android组件间通信的核心。 3. **方法和字段**:每个类和接口都包含一系列的方法和字段,...

    Android官方中文文档

    ### Android官方中文文档:Application Fundamentals #### 一、引言 在《Android官方中文文档》的“Application Fundamentals”部分,主要介绍了Android应用程序的基本构建模块。这部分文档为开发者提供了深入理解...

    Android Lifecycle for application developers Guidelines and Tips

    根据提供的文档信息,我们可以深入探讨Android应用开发中的生命周期管理及其对开发者的重要意义。本文将详细介绍文档中的关键知识点,并提供实用的指南与技巧。 ### Android生命周期基础实践 Android应用程序的...

    Android Application Development

    - **Hello, Android**:这是Android应用开发中的第一个程序,类似于经典的“Hello World”示例,目的是让开发者熟悉Android应用的基本架构和生命周期。 - **创建应用程序和活动**:应用程序由多个组件构成,其中最...

    Android Application development for Dummies

    - **Activity生命周期**:Activity是Android应用中的一个组件,负责显示用户界面。 - Activity的不同状态及对应的回调方法。 - 如何处理Activity的启动、暂停、停止和销毁。 #### 四、创建第一个Android应用 - *...

    android相关文档资源

    此外,可能会讲解Android应用程序的生命周期管理和多线程处理,这些都是Android开发中的重要概念。 其次,"Android数据库技术"文档专注于数据存储和管理,这是任何复杂应用的基础。Android支持SQLite数据库,这是一...

    Android Application Development for Dummies.pdf

    在掌握了基本的开发技能后,开发者可以进一步深入学习Android框架,了解其内部工作原理,包括Activity生命周期管理、Service后台服务、Broadcast Receiver广播接收器、Content Provider内容提供者等核心组件。...

    Android API 文档(含有中文版+英文官方版).zip

    这里会详细说明Activity的生命周期、启动和停止过程、如何处理用户事件以及如何与其他组件(如Service、BroadcastReceiver等)交互。 再者,Android SDK中包含了大量的包,如`android.app`、`android.content`、`...

    android 开发文档

    - **活动管理器**:管理应用程序的生命周期并提供通用的导航支持。 #### 8. Android的核心库 - **系统C库**:调整后的标准C库,适用于嵌入式Linux设备。 - **媒体库**:支持多种音视频格式的播放和录制。 - **...

    Android开发文档.pdf

    这条知识点介绍了Android中Fragment的概念,包括Fragment的生命周期、Fragment的使用方式等。 6. 两种方式将Layout中的XML转换为View 这条知识点介绍了Android中将XML转换为View的两种方式,包括使用...

    Android 官方SDK文档 Service

    - **生命周期方法**:Service拥有自己的生命周期管理机制,主要包括`onCreate()`、`onStartCommand()`、`onBind()`、`onDestroy()`等方法。 - **声明位置**:每个Service类都需要在该应用包的`AndroidManifest.xml`...

    AWP.Android.Wireless.Application.Development.Volume.I.3rd.Edition.Feb.2012

    - **理解生命周期**:深入解释Android应用程序的不同状态(如启动、运行、暂停、停止等),并讨论如何有效地管理这些状态转换。 - **内存管理**:教授开发者如何合理使用内存资源,避免常见的内存泄漏问题。 4. *...

    Android Studio Application Development_androidstudio_

    1. LiveData与ViewModel:这两者是Android架构组件的一部分,用于实现数据绑定和生命周期管理,帮助创建响应式、无状态的应用。 2. Room数据库:Room是SQLite的抽象层,提供更简单的数据库操作接口。 3. Kotlin协程...

    Android文档

    可以使用Application Context来避免生命周期问题,或者使用依赖注入框架(如Dagger或Hilt)来管理单例。 最后,"MultiThread"涉及到Android应用中的多线程处理。由于Android设备通常资源有限,多线程可以有效地提高...

    Android Application Development in 24 Hours

    Android SDK包含了开发Android应用所需的所有工具和文档。本书将指导读者如何安装和配置Android Studio,这是官方推荐的集成开发环境(IDE),它集成了项目管理、代码编辑、调试、性能分析等功能。 #### 4. Android...

Global site tag (gtag.js) - Google Analytics