`

Android Activity 生命周期的透彻理解

阅读更多

首先看看android developers 网上的activity的生命周期图:

      activity启动的时候:onCreate ---> onStart ---> onResume 这个过程不用多说,大家都知道。
这里主要讲讲: 何时onPause, 何时onStop,何时onDestory; 以及恢复的时候,何时onRestart,何时onResume。
为了方便说明这里把当前activity称为MainActivity,其他的activity称为SecondActivity、ThirdActivity等等。
通过上图的我们可以看出activity从running状态跳转到onPause状态的原因是:Another activity comes into the foreground. 也就是说有另外一个actvity被启动并运行了,比如说MainActivity通过startActivity启动了SecondActivity,那么SecondActivity就在ui视图的最顶层了,而MainActivity不再是最顶层的activity了,此时就会onPause了,此时我们依稀还能看到MainActivity,只是MainActivity已经站在他人之后了。

    而当MainActivity完全被SecondActivity挡住,完全看不见的时候,此时MainActivity就会onStop了。我们看看上图从onPause到onStop的原因是:the activity is no longer visiable. 也就是说此时MainActivity完全不可见了,从这里我们可以猜测当按下home键的时候,当前activity就会处于onStop的状态。
从actvitiy的生命周期图中,我们可以看出activity是可以停留在onPause和onStop在这两个状态上的,因为可以相应的恢复。

 

那么何时停留在onPause,何时停留在onStop呢?


下图的MainActivity就是处于onPause状态:


因为这里的second actvity是dialog样式:
<activity android:name=".SecondActivity" android:theme="@android:style/Theme.Dialog">
也就验证了当MainActivity不再在最顶端,但仍然可见的时候,MainActivity就处于onPause状态,此时如果退出(back键)second activity,那么MainActivity就会onResume。


下图的MainActivity就是处于onStop状态(注意,这里的third activity 是在 MainActivity中通过startActivity启动的):

 

因为此时MainActivity已经完完全全被Thrid actvity挡住了,完全不可见了,所以MainActivity处于onStop状态,如果此时退出Thrid activity(back键),那么MainActivity就会onRestart().


何时onDestory呢?
当在MainActivity中按back键,退出时,最终就会走到onDestory,或者在代码中调用finish()的时候也会走到onDestroy这一步。

 


对于activity生命周期图的左侧部分:



当MainActivity处于onPause和onStop状态时,当更高优先级的apps需要内存,而此时系统内存不够了,那么android系统就会将MainActivity所在的进程给杀了以释放资源。
当然被杀了之后,想重生,那必须得从头来过: onCreate ---> onStart() ---> onResume().

分享到:
评论

相关推荐

    Android应用开发基础教学大纲.pdf

    旨在通过系统介绍 Android 平台的开发和编程技术,并通过实例介绍和理解内容,使学生掌握 Android 开发平台的安装、管理、编程开发和网络应用等技能,更加透彻理解 Android 开发平台的基本原理和实现方法,培养在...

    Android基础教程

    理解和正确管理这些生命周期对于开发稳定和高效的Android应用至关重要。 界面设计是用户体验的关键。在Android中,界面主要通过XML布局文件定义,开发者可以使用各种布局管理器(如LinearLayout、RelativeLayout等...

    Android 应用框架原理与程序设计36技源码.rar

    源码中可能包含不同类型的Activity实例,如单Activity、多Activity通信以及Activity的生命周期管理,帮助我们学习如何有效地组织和管理应用的视图。 3. **Intent机制**:Intent是Android系统中用于对象间通信的重要...

    Android动态显示年月日周时分秒(通过线程的方式)

    开发者需要对这些知识点有透彻的理解,并且熟悉Android开发流程,才能更加得心应手地在Android应用中实现类似的功能。在实际开发中,还需要注意到可能由于OCR扫描导致的个别字识别错误或漏识别情况,需要根据上下文...

    Android的对象技术(OOP)1-9_高焕堂老师

    这本书以其深入浅出、寓教于乐的方式,帮助开发者更透彻地理解Android系统的工作原理,提升开发技能。 1. 面向对象编程基础 在Android开发中,OOP是核心概念。书中会详细讲解类(Class)、对象(Object)、封装...

    实验四-Android基本组件交互实验.doc

    - `bindService()`:Service与调用它的组件绑定,两者生命周期关联,组件销毁时Service也会停止。 4. **BroadcastReceiver组件** - BroadcastReceiver用于接收系统或应用发送的广播消息,并作出相应处理。 - ...

    Android开发教程

    2. **Activity**:阐述Activity作为用户界面的主要组件,以及它的生命周期和如何在多个Activity之间进行导航。 3. **Intent**:介绍Intent的作用,用于启动其他组件或传递数据,如启动Activity或Service。 ### 三、...

    疯狂安卓讲义代码2

    - 深入理解Service的生命周期和使用场景,如后台音乐播放、定时任务等。 - 探索BroadcastReceiver的应用,实现系统广播和自定义广播的接收。 6. **权限管理** - 了解Android运行时权限机制,如何在API 23及以上...

    Tugas-Pemrograman-Mobile

    10. **生命周期**:每个Android组件都有其特定的生命周期,开发者必须理解这些生命周期方法以便正确管理资源。 11. **异步编程**:例如AsyncTask、Handler、IntentService、Retrofit、Coroutines等,用于在主线程...

    眼底

    9. **Android开发**:Java也是Android开发的主要语言,熟悉Android SDK、Activity生命周期、Intent、BroadcastReceiver等概念对于开发移动应用非常重要。 10. **测试与调试**:JUnit、Mockito等工具是进行单元测试...

Global site tag (gtag.js) - Google Analytics