❑ Active
当Activity在栈的顶端时,它是可见的,有焦点的前台Activity,用来响应用户的输入。Android会不惜一切代价来尝试保证它的活跃性,需要的话它会杀死栈中更靠下的Activity来保证Active Activity需要的资源。当另一个Activity变成Active状态时,这个就会变成paused。
❑ Paused
在一些情况下,你的Activity可见但不拥有焦点;在这个时刻,它就是暂停的。当最前面的Activity是全透明或非全屏的Activity时,下面的Activity就会到达这个状态。当暂停时,这个Activity还是被看作是active的,但不接受用户的输入事件。在极端的情况下,Android会杀死一个paused的Activity来恢复资源给active Activity。当一个Activity完全不可见时,它就变成stopped。
❑ Stopped
当一个Activity不可见,它就“停止”了。这个Activity仍然留在内存里来保存所有的状态和成员信息;但是,在什么地方当系统需要内存时,它就是“罪犯”拉出去枪毙了。当一个Activity停止时,保存数据和当前UI状态是很重要的。一旦Activity退出或关闭,它就变成inactive。
❑ Inactive
当一个曾经被启动过的Activity被杀死时,它就变成inactive。Inactive Activity会从Activity栈中移除,当它重新显示和使用时需要再次启动。
状态的变化是人为的,完全由Android内存管理器掌握着。Android会首先关闭那些包含inactive Activity的应用程序,其次关闭那些stopped的程序,极端的情况,会移除那些paused的程序。
为了保证无瑕疵的用户体验,这些状态的迁移对用户来说必须是不可见的。当Activity从paused、stopped或者杀死的状态返回到active的时候,UI必须是无差别的。所以,当Activity暂停或停止时,保存所有的UI状态和数据是很重要的。一旦Activity变成active,它需要从保存的值中恢复。