首先明确Activity是什么?
Activity是一个Android的应用组件,它提供屏幕进行交互,每个Activity都会获得一个用于绘制其他用户界面的窗口,窗口可以充满屏幕也可以小于屏幕并浮动在其他窗口之上.
一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity.
当然Activity之间可以进行互相跳转,以便执行不同的操作,但是系统会在堆栈也就是返回栈中保留该Activity.当新Activity启动时,系统也会将其推送到返回栈上,并且取得用户的操作焦点.当用户完成当前Activity并按返回按钮时,系统就会从堆栈将其弹出销毁,然后恢复前一个Activity.
当一个Activity因某个新的Activity启动而停止时,系统会通过该Activity的生命周期回调方法通知其这一状态的变化.Activity因状态变化每个变化可能有若干种,每一种回调都会提供执行与该状态相应的特定操作的机会.例如,停止时,我们的 Activity 应释放任何大型对象,例如网络或数据库连接。 当 Activity 恢复时,我们可以重新获取所需资源,并恢复执行中断的操作。 这些状态转变都是 Activity 生命周期的一部分。
以上内容来自https://www.jianshu.com/p/ee187d9bcbbc
活动的生命周期
正常情况下,一个Activity会经历如下生命周期
- 1.onCreate()
表示Activity正在被创建,每个活动中我们都重写了这个方法,他会在活动第一次被创建的时候调用.在这个方法中我们可以完成活动的初始化操作,比如说加载布局,绑定事件等. - 2.onRestart()
表示Activity正在重新启动.一般情况下,当当前Activity从不可见变为可见时,onRestart会被调用.这种情形一般是用户行为所导致的,比如用户按Home键切换到桌面或者用户打开了一个新的Activity,此时当前的Activity就会暂停,即onPause和onStop被调用,接着用户重新回到了这个activity,此时onRestart就会被调用 - 3.onStart()
表示Activity正在被启动,即将开始,此时Activity已经可见了,但还没有出现在前台,即还无法与用户进行交互.可以理解为Activity已经显现出来了,但是我们还看不见. - 4.onResume()
表示Activity已经可见了,并且出现在前台并开始活动,此时可以与用户进行交互.此时的活动一定位于返回栈的栈顶,并且处于运行状态. - 5.onPause()
表示Activity正在停止,正常情况下onStop会紧接着被调用.这个方法在系统准备去启动或者恢复另一个活动的时候调用.我们通常会在这个方法中将一些消耗cpu的资源释放掉(比如动画),以及保存一些关键数据,但不能太耗时,不然会影响到新的栈顶活动的使用,onPause必须先执行完,新Activity的onResume才会执行. - 6.onStop()
表示Activity即将停止,在活动完全不可见的时候调用.它和onPause方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause方法会得到执行,而onStop方法并不会执行,可以做一些稍微重量级的回收工作,同样不能太耗时. - 7.onDestroy()
表示Activity即将被销毁,这个方法在活动被销毁之前调用,之后活动状态将变为销毁状态,这是Activity生命周期的最后一个回调,在这里我们可以做一些回收工作和最终的资源释放.
正常情况下Activity的常用生命周期就只有以上七个,如下图
活动在其生命周期的四种状态
每个活动在其生命周期中最多可能会有四种状态
- 1.运行状态
当一个活动位于返回栈的栈顶时,这时活动就处于运行状态,及可交互的状态.系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验. - 2.暂停状态
当一个活动不在处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态.你可能会觉得既然活动已经不在栈顶了,还怎么会可见呢?这是因为并不是每个活动都会占满整个屏幕的,比如对话框形式的活动只会占用屏幕中间的部分区域,比如采用透明主题的新Activity.处于暂停状态的活动仍然是完全存活着的,系统也不愿意去回收这种活动(因为它还是可见的,回收可见的东西都会在用户体验放面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种活动. - 3.停止状态
当一个活动不再处于栈顶的位置,并且完全不可见的时候,就进入了停止状态.比如按了Home键之后,Activity就进入了停止状态.系统仍然会为这种活动保存相应的状态和成员变量,但是这并不是完全可靠的,当其他地方需要内存时,处于停止状态的活动有可能会被系统回收. - 4.销毁状态
当一个活动从返回栈中移除后就变成了销毁状态.比如用户按了back键,此时Activity就会被销毁.系统会最倾向于回收处于这种状态的活动,从而保证手机的内存充足.
两个问题?
- 1.onStart和onResume、onStart和onStop从描述上来看差不多,对我们来说有什么实质上的不同?
A:这两个配对的回调分别表示不同的意义,onStart和onStop是从Activity是否可见的角度来回调的,而onResume和onPause是从Activity是否位于前台来回调的,除了这种区别,在实际使用中没有其他明显的区别。 - 2.假设当前Activity 为A,如果此时用户打开一个新Activity B,那么B的onResume和 A 的onPause那个先执行?
A:A onPause先执行,B的onResume后执行,从Log日志和ActivityStack中可以看出,在新Activity启动之前栈顶的Activity需要先onPause后,新的Activity才能启动。