一、Activity是什么
Activity是四大组件之一,提供一个屏幕,用户可以用来交互为了完成某项任务。
二、Activity四种状态
2.1、基本状态
-
active/running(运行状态)
一个新 Activity启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。
-
paused(暂停状态)
当 Activity失去焦点, 被一个新的非全屏的Activity或者一个透明的Activity被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。
-
stopped(停止状态)
如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,Activity处于Stopped状态。当Activity处于此状态时,一定要保存当前数据和当前的UI状态,否则一旦Activity退出或关闭时,当前的数据和UI状态就丢失了。当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。
-
killed(销毁状态)
Activity被杀掉以后或者被启动以前,处于Killed状态。这是Activity已从Activity堆栈中移除,需要重新启动才可以显示和使用。
注:4种状态中,Running状态和Paused状态是可见的,Stopped状态和Killed状态时不可见的。
2.2、 状态转换
当一个 Activity实例被创建、销毁或者启动另外一个 Activity时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。下图说明了 Activity在不同状态间转换的时机和条件:

三、Activity生命周期

-
onCreate()
这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate()方法,onCreate()方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
-
onStart()
这个方法在Activity由不可见变为可见时调用。
-
onResume()
这个方法在Activity准备好和用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
-
onPause()
这个方法在Activity被Dialog或透明的Activity覆盖的时候调用。
-
onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
-
onDestroy()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
-
onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
注:Android在界面跳转的时候,比如从Activity B 跳回 Activity A,并不是先执行B的onDestroy(),而是执行完B的onPause()之后就立即跳回A里的onResume()。在执行了A 的onResume()之后一两秒甚至更长一点的时间才执行B里的onDestroy()。
这样的处理机制应该是为了能够立即响应用户的操作。这样的话一些操作就要放到onPause()里去执行。比如视频的暂停销毁或者一些反注册。所以对时间要求和Activity是否获取焦点密切相关的操作,不能放在onCreate()和onDestroy()里,而应该考虑放在onResume()和onPause()里