Activity

返回栈

Android其实是通过任务(task)来管理Activity的,每一个task都是一组存放在栈中的Activity集合,这个栈也称为返回栈(back stack),栈是一种后进先出的数据结构。在默认情况下,我们启动了一个新的Activity,他就会在返回栈中入栈,并处于栈顶的位置。每当我们启动新的Activity时,都会在返回栈中入栈,且位于栈顶。而当我们back或者finish销毁Activity时,处于当前返回栈栈顶的Activity将会出栈,前一个入栈的Activity将会处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。


Activity的状态

  1. 运行状态

    当Activity处于栈顶,且为可见状态时,即为运行状态。系统不愿意回收可见状态的Activity,因为这会给用户带来极差的体验。

  2. 暂停状态

    当Activity不处在栈顶,且不完全为可见状态时,即为暂停状态。例如对话框形式的Activity即只占用了部分区域的Activity 系统也不愿意回收这种Activity,只有在内存极低的情况下系统才会去考虑回收这种Activity

  3. 停止状态

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

  4. 销毁状态

    一个Activity从栈中移除后就变成了销毁状态。系统倾向于回收这种状态的Activity,以保存系统内存的充足。

未完待续…


Activity的启动模式

1
android:launchMopde="xxxx"
  1. standard
    1. 创建一个活动并入栈
  2. singleTop
    1. 直接使用栈顶的活动,若需求活动不处于栈顶,则依旧重新实例化该活动并入栈
  3. singleTask
    1. 检测返回栈中已存在的活动,若需求活动已存在则直接使用置于栈顶并将其上的活动出栈。若不存在则重新实例化并入栈
  4. singleInstance
    1. 创建一个单独的共享返回栈来存放管理该模式的活动,以便于提供给其他程序对于该活动实列的访问。

关于Activity的灵活使用案例


UI

UI开发工具


基本布局


基本控件


自定义控件


Fragment


广播