什么是Activity生命周期
Activity生命周期,英文名也叫activity_lifecycle。
Activity状态
每个Activity在其生命周期内可能会有哪几种状态吗?没错,一共有运行状态、暂停状态、停止状态和销毁状态这4种。
运行状态
当一个Activity位于返回栈的栈顶时,Activity就处于运行状态。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。
暂停状态
当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。你可能会觉得,既然Activity已经不在栈顶了,怎么会可见呢?这是因为并不是每一个Activity都会占满整个屏幕,比如对话框形式的Activity只会占用屏幕中间的部分区域。处于暂停状态的Activity仍然是完全存活着的,系统也不愿意回收这种Activity(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种Activity。
停止状态
当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。系统仍然会为这种Activity保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于停止状态的Activity有可能会被系统回收。
销毁状态
一个Activity从返回栈中移除后就变成了销毁状态。系统最倾向于回收处于这种状态的Activity,以保证手机的内存充足。
Activity生命周期(活动的生命周期)
在学习了有关活动编程的知识之后,现在来学习活动中的生命周期。只有完全理解了活动的生命周期,在今后的Android编程中才会更加得心应手,这也是面试Android开发类工作时的一个重要考点。为了让Android App在活动(Activity)生命周期的各个阶段之间导航转换,Activity类提供了6个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()。当活动进入新状态时,系统会调用这些回调方法。
Activity类中定义了7个回调方法,这些称为我们系统的一个回调,又称为callback
。覆盖了Activity生命周期的每一个环节,下面就来一一介绍这7个回调方法的具体作用。
● (1)onCreate()。
这个方法你已经看到过很多次了,我们在每个Activity中都重写了这个方法,它会在Activity第一次被创建的时候调用。你应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
这个方法在每次活动最开始启动时都会运行,并且在每一个活动中只允许这个方法出现一次。
● (2)onStart()。
这个方法在Activity由不可见变为可见的时候调用。
当活动开始运行并转入不可运行时,这个方法开始运行,因为应用会为Activity进入前台并为支持交互做准备。
● (3)onResume()。
这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
活动会在进入“已恢复”状态时来到前台,然后系统调用onResume()回调方法。这是应用与用户交互的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。此类事件包括接到来电、用户导航到另一个活动或设备屏幕关闭。
● (4)onPause()。
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
当App准备启动另一个活动时进行回调。
●(5) onStop()。
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。
当活动在完全不可见时进行回调。
● (6)onDestroy()。
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
在活动销毁之前进行回调。
● (7)onRestart()。
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
当活动重新开始运行时回调。
以上7个方法中除了onRestart()方法,其他都是两两相对的,从而又可以将Activity分为以下3种生存期。
● (1)完整生存期。Activity在onCreate()方法和onDestroy()方法之间所经历的就是完整生存期。一般情况下,一个Activity会在onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。
● (2)可见生存期。Activity在onStart()方法和onStop()方法之间所经历的就是可见生存期。在可见生存期内,Activity对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop()方法中对资源进行释放,从而保证处于停止状态的Activity不会占用过多内存。
● (3)前台生存期。Activity在onResume()方法和onPause()方法之间所经历的就是前台生存期。在前台生存期内,Activity总是处于运行状态,此时的Activity是可以和用户进行交互的,我们平时看到和接触最多的就是这个状态下的Activity。
为了帮助你更好地理解,Android官方(Google的文档)提供了一张Activity生命周期的示意图,我们每一个activity
是从创建,到结束。它会经历下面这样一个循环周期,如图3.24所示。
图 Activity的生命周期
举例子:
package com.example.lifecycle;import ...public class MainActivity extends AppCompatActivity{String TAG = "myTag";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main)log.d(TAG, msg:"onCreate: ");//finish();}@Overrideprotected void onStart() {super.onStart()log.d(TAG, msg:"onStart: ");}@Overrideprotected void onResume() {super.onResume()log.d(TAG, msg:"onResume: ");}@Overrideprotected void onPause() {super.onPause()log.d(TAG, msg:"onPause: ");}@Overrideprotected void onStop() {super.onStop()log.d(TAG, msg:"onStop: ");}@Overrideprotected void onRestart() {super.onRestart()log.d(TAG, msg:"onRestart: ");}@Overrideprotected void onDestroy() {super.onDestroy()log.d(TAG, msg:"onDestroy: ");}
}
什么是Activity生命周期相关推荐
- 基础总结篇之一:Activity生命周期
子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...
- activity生命周期及数据保存
为什么80%的码农都做不了架构师?>>> public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@ ...
- Android activity生命周期
这篇博客主要包含以下知识点: activity介绍. activity生命周期的详细过程(不同情况下的变化以及状态的改变).finish和onDestory方法的关系.onSaveInstanceSt ...
- framework之Activity 生命周期解析(基于Android11源码)
引言 上一篇讲了Activity的创建过程(没看过的小伙伴移步 点我前往).由于篇幅的问题,只分析到OnCreate周期,那这一篇就接着讲余下部分的周期. 在高版本上,activity的周期都是以事务 ...
- View的生命周期方法和Activity生命周期方法关系
View 是在Activity 中使用到的,所以在自定义View的时候,我们需要了解Activity 生命周期方法和View的生命周期方法调用先后顺序. 见如下图 (1) 在Activity onC ...
- activity 生命周期_死磕Android_App 启动过程(含 Activity 启动过程)
1. 前言 Activity是日常开发中最常用的组件,系统给我们做了很多很多的封装,让我们平时用起来特别简单,很顺畅.但是你有没有想过,系统内部是如何启动一个Activity的呢?Activity对象 ...
- Android Activity生命周期举例说明(图文)
同学电话面试提及到Activity生命周期的详细说明,现整理如下: 转载请标明姓名及出处:大飞_Rflyee - http://blog.csdn.net/rflyee/article/details ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Android的Activity生命周期模拟程序及解析
当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动 ...
- Activity生命周期的补充
正常来说Activity的生命周期是这样的 如果有重写 onSaveInstanceState(Bundle outState) 来保存重要参数 ,比如有重新赋值的成员变量,那么 onSaveInst ...
最新文章
- 美多商城之用户中心(用户基本信息)
- Unity 编辑器扩展 场景视图内控制对象
- 《C++标准程序库》读书笔记(三)
- kaggle数据集命令行下载
- Citrix桌面及应用虚拟化系列之二:XenServer补丁
- 网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?
- 使用display:none和visibility:hidden隐藏的区别
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
- Android抓包方法(三) 之Win7笔记本Wifi热点+WireShark工具
- python将视频一帧一帧_python 用opencv接口把视频逐帧转化为图片
- 最全的react视频【黑马程序员】--第一章 react介绍
- [记录]关于电机反转和l298n和我的心里斗争
- 电子商城战略分析(采用定性与定量分析方法)
- JAVA集合继承关系图介绍和Collection接口深刻理解
- 【计算机体系结构】实验4指令调度与分支延迟
- xlsxwriter去掉网格线_(原创)xlsxwriter,python excel 写入数据\图表等操作_图表操作(二)...
- 《基于PAM4调制的50Gbit_s_BIDI光模块设计_陈春山》论文错别字
- qemu在window使用树莓派
- python 通过selenium 定位图片后获取src属性
- 又dota了......