`
mmdev
  • 浏览: 13141179 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android中级教程之--------Android应用程序的生命周期(一定要理解,面试会问的哦!)

阅读更多

Android的应用程序的生命周期,我相信这在以后的Android面试一定是经常考的题目,所以大家一点要重视哦!下面我将图文双线程,希望对大家有一点帮助!

首先我们看一下Android应用程序的生命周期图:

在大部份情况下,每个Android应用都将运行在自己的Linux进程当中。当这个应用的某些代码需要执行时,进程就会被创建,并且将保持运行,直到该进程不再需要,而系统需要释放它所占用的内存,为其他应用所用时,才停止。
Android一个重要并且特殊的特性就是,一个应用的进程的生命周期不是由应用自身直接控制的,而是由系统,根据运行中的应用的一些特征来决定的,包括:这些应用对用户的重要性、系统的全部可用内存。
对于应用开发者来说,理解不同的应用组件(特别是ActivityServiceIntent Receiver)对应用进程的生命周期的影响,这是非常重要的。如果没有正确地使用这些组件,将会导致当应用正在处理重要的工作时,进程却被系统消毁的后果。
对于进程生命周期,一个普遍的错误就是:当一个Intent Receiver在它的onReceiveIntent()方法中,接收到一个intent后,就会从这个方法中返回。而一旦从这个方法返回后,系统将会认为这个Intent Receiver不再处于活动状态了,也就会认为它的宿主进程不需要了(除非宿主进程中还存在其它的应用组件)。从而,系统随时都会消毁这个进程,收回内存,并中止其中还在运行的子线程。问题的解决办法就是,在IntentReceiver中,启动一个Service,这样系统就会知道在这个进程中,还有活动的工作正在执行。
为了决定在内存不足情况下消毁哪个进程,Android会根据这些进程内运行的组件及这些组件的状态,把这些进程划分出一个“重要性层次”。这个层次按顺序如下:
1、前端进程是拥有一个显示在屏幕最前端并与使用者做交互的Activity(它的onResume已被调用)的进程,也可能是一个拥有正在运行的IntentReceiver(它的onReceiveIntent()方法正在运行)的进程。在系统中,这种进程是很少的,只有当内存低到不足于支持这些进程的继续运行,才会将这些进程消毁。通常这时候,设备已经达到了需要进行内存整理的状态,为了保障用户界面不停止响应,只能消毁这些进程;
2、可视进程是拥有一个用户在屏幕上可见的,但并没有在前端显示的Activity(它的onPause已被调用)的进程。例如:一个以对话框显示的前端activity在屏幕上显示,而它后面的上一级activity仍然是可见的。这样的进程是非常重要的,一般不会被消毁,除非为了保障所有的前端进程正常运行,才会被消毁。
3、服务进程是拥有一个由startService()方法启动的Service的进程。尽管这些进程对于使用者是不可见的,但他们做的通常是使用者所关注的事情(如后台MP3播放器或后台上传下载数据的网络服务)。因此,除非为了保障前端进程和可视进程的正常运行,系统才会消毁这种进程。
4、后台进程是拥有一个用户不可见的ActivityonStop()方法已经被调用)的进程。这些进程不直接影响用户的体验。如果这些进程正确地完成了自己的生命周期(详细参考Activity类),系统会为了以上三种类型进程,而随时消毁这种进程以释放内存。通常会有很多这样的进程在运行着,因些这些进程会被保存在一个LRU列表中,以保证在内存不足时,用户最后看到的进程将在最后才被消毁。
5、空进程是那些不拥有任何活动的应用组件的进程。保留这些进程的唯一理由是,做为一个缓存,在它所属的应用的组件下一次需要时,缩短启动的时间。同样的,为了在这些缓存的空进程和底层的核心缓存之间平衡系统资源,系统会经常消毁这些空进程。
当要对一个进程进行分类时,系统会选择在这个进程中所有活动的组件中重要等级最高的那个做为依据。可以参考ActivityServiceIntentReceiver文档,了解这些组件如何影响进程整个生命周期的更多细节。这些类的文档都对他们如何影响他们所属的应用的整个生命周期,做了详细的描述。

分享到:
评论

相关推荐

    android面试题(中级)

    1. **Android体系结构**:面试可能会问到Android系统的分层结构,包括Linux内核、硬件抽象层、系统库、应用程序框架以及应用程序。理解每一层的作用至关重要,例如Linux内核负责硬件交互,应用程序框架支持组件交互...

    Android 知识库,涵盖初级-中级-高级,常见的面试题、知识盲区、使用技巧等等.zip

    - **Activity生命周期**:Activity是Android应用的基本组件,理解其启动、暂停、恢复、销毁等状态的转换至关重要。 - **Intent机制**:Intent用于启动服务、启动活动或传递数据,是Android系统内部通信的核心。 -...

    Android面试大全.zip

    此外,随着Android技术的发展,面试中可能会出现更多关于Android Jetpack、Kotlin特性的题目,以及对MVVM、MVP等设计模式的理解和应用。 综上所述,《Android面试大全》这本书的内容广泛而深入,对于准备Android...

    初中级Android开发社招面试之Service及BroadcastReceiver.pdf

    Service是Android系统中的一种组件...综上所述,Service和BroadcastReceiver在Android开发中扮演着重要角色,理解它们的生命周期、启动方式、交互机制以及如何优化其性能是面试中常见的问题,也是开发者必备的知识点。

    初中级Android开发社招面试之Service及BroadcastReceiver.zip

    在Android应用开发中,Service和BroadcastReceiver是两个非常重要的组件,它们构成了应用程序后台运行和系统消息传递的基础。本文将深入探讨这两个组件的概念、用途、工作原理以及面试中可能遇到的相关问题。 **一...

    初中级Android开发社招面试之Activity篇.zip

    本资料主要聚焦于初中级Android开发者在社会招聘面试中可能会遇到的Activity相关问题,旨在帮助求职者深入理解这一核心概念。 Activity的生命周期是面试中常考的知识点,包括了onCreate(), onStart(), onResume(), ...

    初中级Android开发社招面试之线程.pdf

    理解这些概念对于初中级Android开发者来说至关重要,因为它们直接影响到应用的性能和用户体验。在面试中,对这些知识点的深入理解和应用展示了一个开发者对Android多线程和资源管理的掌握程度。

    初中级Android开发社招面试之Activity篇.pdf

    在面试中,对于初中级Android开发者来说,理解Activity的生命周期、启动模式以及相关方法的使用至关重要。 1. Activity生命周期: - `onCreate()`:Activity首次创建时调用,用于设置界面布局和初始化数据。 - `...

    初中级Android开发社招面试之Fragment篇.pdf

    在面试中,对Fragment的深入理解对于初中级Android开发者来说至关重要。下面将详细阐述Fragment的生命周期、与Activity的区别、add与replace的操作差异,以及FragmentManager的相关方法。 1. **Fragment的生命周期*...

    初中级Android开发社招面试之Fragment篇.zip

    本资料主要针对初中级Android开发者,旨在帮助他们在社招面试中更好地理解和解答关于Fragment的问题。 Fragment最初在Android 3.0(API级别11)引入,是为了适应平板电脑等大屏幕设备上多任务和多窗口的需求。但...

    Android面试题知识点集锦.rar

    这份“Android面试题知识点集锦”涵盖了中级程序员应掌握的核心技术,适用于准备晋升或跳槽的开发者进行自我提升。以下是各文档内容的概览: 1. **Android异常与性能优化** - 异常处理:理解并熟练使用try-catch-...

    初中级Android开发社招面试之Handler.zip

    本文将深入探讨Handler的相关知识点,为初中级Android开发者提供面试准备指南。 1. **Handler基础** Handler的主要作用是发送并处理Message或Runnable对象,它通过与Looper和MessageQueue配合工作,实现消息的调度...

    初中级Android开发社招面试之性能优化.zip

    本资料"初中级Android开发社招面试之性能优化"将探讨一些核心的性能优化策略。 一、UI性能优化 1. 使用RecyclerView替代ListView:RecyclerView提供了更灵活的item布局管理,并且通过ViewHolder模式降低了视图复用...

    初中级Android开发社招面试之设计模式.zip

    以上是初中级Android开发面试中常见的设计模式。理解并熟练应用这些模式,能帮助开发者写出更加灵活、可维护的代码,也是面试官衡量候选人能力的重要标准。在实际项目中,往往需要结合多种模式,灵活应对复杂的需求...

    前端实战(vue、小程序、uniapp、html/css/js).zip

    学习微信小程序开发,你需要理解它的API、生命周期、样式系统和页面结构,同时掌握如何进行微信开发者工具的使用。 UniApp是一个由HBuilderX支持的跨平台开发框架,它允许开发者使用一套代码实现多端部署,如iOS、...

Global site tag (gtag.js) - Google Analytics