当前位置: 移动技术网 > 移动技术>移动开发>Android > (笔记)Android四大组件之Activity

(笔记)Android四大组件之Activity

2020年07月23日  | 移动技术网移动技术  | 我要评论

什么是Activity

Activity是一种可以包含用户界面的组件,主要用于和用户进行交互。

Activity的生命周期

Android是通过任务来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫做返回栈(Back Stack)。每当启动一个新的Activity,就会在返回栈中入栈,并处于栈顶的位置。每当我们销毁一个Activity时,在栈顶的Activity就会出栈,这时前一个入栈的就会重新在栈顶出现。系统会显示处于栈顶的Activity给用户。

每个Activity的生命周期最多有四种状态。

运行状态

当一个activity位于返回栈的栈顶时,这时activity就处于运行状态。系统最不愿意回收的就是处于运行状态的activity,因为这会带来非常差的用户体验。

暂停状态

当一个activity不再处于栈顶位置,但仍然可见时,这时activity就进入了暂停状态。你可能会觉得既然activity已经不在栈顶了,还怎么会可见呢?这是因为并不是每-一个activity都会占满整个屏幕的,比如对话框形式的activity只会占用屏幕中间的部分区域,你很快就会在后面看到这种activity。处于暂停状态的activity仍然是完全存活着的,系统也不愿意去回收这种activity(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种activity。

停止状态

当一个activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。系统仍然会为这种activity保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于停止状态的activity有可能会被系统回收。

销毁状态

当一个activity从返回栈中移除后就变成了销毁状态。系统会最倾向于回收处于这种状态的activity,从而保证手机的内存充足。

Activity的生存期

Activity一共有7个回调方法,覆盖了activity生命周期的每一个环节。

onCreate()。在activity第一次被创建的时候调用,在这个方法中完成初始化操作,比如加载布局,绑定事件等。

onStart()。在activity有不可见变为可见的时候调用

onResume()。在activity准备好和用户进行交互的时候调用。此时的activity一定位于返回栈的栈顶,并且处于运行状态。

onPause()。在系统准备去启动或者恢复另一个activity的时候调用。通常会在这个方法中将一些小号CPU的资源释放掉,以及保存一些关键数据,但是在执行速度要快,否则会影响到新的栈顶activity的使用。

onStop()。在activity不可见的时候调用,和onPause()的区别在于,如果启动的是一个对话框式的activity,那么onPause()会得到执行,而onStop()不会执行。

onDestroy()。在activity被销毁之前调用,之后activity就变成销毁状态。

onRestart()。在activity由停止变为运行状态之前调用,即activity被重新启动。

以上方法除了onRestart(),都是两两相对的,从而将activity分为三种生存期。

完整生存期

activity在onCreate()和onDestroy()之间经历的,就是完整生存期。activity会在onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。

可见生存期

activity在onStart()方法和onStop()方法之间所经历的, 就是可见生存期。在可见生存期内,activity对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart()方法中对资源进行加载,而在onStop( )方法中对资源进行释放,从而保证处于停止状态的activity不会占用过多内存。

前台生存期

activity在onResume( )方法和onPause( )方法之间所经历的就是前台生存期。在前台生存期内,activity总是处于运行状态的,此时的activity是可以和用户进行交互的,我们平时看到和接触最多的也就是这个状态下的activity。

Activity的启动模式

standard

activity的默认启动,可以不用配置,在这种模式下,系统不会在乎该activity是都已经存在,每次启动都会创建该activity的一个新的实例。也可以理解为相同的activity可以叠加。

singleTop

返回栈栈顶是firstactivity,现在要在启动firstactivity,并不会产生新的实例,要是启动secondactivity,会产生新的实例,secondactivity到了栈顶。接下来启动firstactivity,同样会产生新的实例。

singleTask

每个activity只会有一个实例,firstactivity在栈顶时,在启动firstactivity,不会产生实例。要是启动secondactivity,会先判断栈中存在,secondactivity存在,不会创建,不存在的话创建新的实例。

singleInstance

每个activity只有一个实例,会有一个单独的返回栈来管理这个activity。不管哪个应用的程序来访问这个activity,都公用的同一个返回栈。

本文地址:https://blog.csdn.net/be_gin_ner/article/details/107471430

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网