Android 是通过任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合。
每一个任务都有一个id标记,我们既可以把它看做是任务的ID,也可以看做是栈的ID,可通过getTaskId()来查看。
活动的几种状态
1. 运行状态
活动处于栈顶,用户能够看见,能够与用户进行交互。
2.暂停状态
此时活动不在栈顶,但是活动仍然可见,但是不能与用户进行交互。
之所以出现这种情况是因为用户在活动A上打开了一个新的活动B,但是这个活动没有占满屏幕,导致活动A仍然可见。
其实日常中更多的情况是打开活动B,活动B占满整个屏幕,活动A不可见,这时活动A就不是暂停状态,而是停止状态了。
3.停止状态
活动不处于栈顶状态,且完全不可见。
系统会为该活动保存相应的状态和成员变量,但是这不是可靠地,当系统需要内存时,可能会回收处于停止状态的活动。
4.销毁状态
活动从栈中移除,系统回收该活动占用的内存。
Activity中定义的几个回调方法调用顺序介绍
1.新打开一个程序
onCreate() --> onStart() --> onResume()
2.在活动A上打开活动B
需要分几种情况处理
- 打开活动B后,活动A不可见
活动A:
onPause() --> onStop()
活动B:
onCreate() --> onStart() --> onResume()
- 打开活动B后,在活动B下方仍然可以看到活动A
活动A:
onPause()
活动B:
onCreate() --> onStart() --> onResume()
3.退出活动B,回到活动A
活动B:onPause() --> onStop() --> onDestroy()
活动A:onRestart() --> onstart() -- > onResume() (若之前活动A不可见)
活动A:onResume() (若之前活动A仍然可见)
活动的启动模式
1.standard
standard是活动的默认启动模式,每次启动一个活动都会返回该活动的一个新的实例,并且在返回栈中入栈,而不管该活动在栈中是否已经存在实例。
2.singleTop
在启动活动时,会先扫描栈顶的活动,若栈顶的活动已经是该活动,则会直接使用栈顶活动,而不创建新的活动实例。
3.singleTask
在启动活动时会扫描全栈活动,若栈中存在该活动,则直接使用该活动,并且栈中处于该活动之上的活动全部出栈。(请注意区别于singleTop的区别)
4.singleInstance
在已有栈的情况下,单独创建一个栈存放该活动。可通过getTaskId()来判断当前活动具体处于哪个栈中。