读书人

【Android API指南】App组件(五) - Ac

发布时间: 2012-09-09 09:27:54 作者: rapoo

【Android API指南】App组件(5) - Activities(3) - 任务和回退堆栈
一个程序通常包含多个activity,每个activity都被设计来完成指定的动作,并且可以启动另外的activity。例如,一个邮件程序可以有一个显示邮件列表的activity,当用户选择一个邮件时,一个新的显示邮件内容的activity被启动。
一个activity可以启动另外一个程序的activity,让用户感觉就像是一个程序一样,Android让两个activity完成一个任务,让用户感觉到无缝的操作体验。
一个任务包含了一组activity,这些activity被分配在回退堆栈中,并且被按照顺序打开。
当用户点击程序图标时,程序的任务被展示到前台,如果当前的程序没有任务正在运行,那么一个新的任务会被创建,“main”activity会被运行,这个activity也被作为根activity放入到后退堆栈中。
当当前activity启动另外一个activity时,新的activity被放入堆栈的顶部,并取得焦点,先前的activity被保持在堆栈中,但是出于被停止状态,这个状态下,系统会保持用户的当前状态,当用户按back键返回时,当前状态会被恢复,前面启动的那个activity会被弹出堆栈并被销毁。activity在堆栈中是不会被重新排序的,他遵循“后进,先出”规则。下图展示了堆栈的每个时间段的状态:【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈
【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈如果用户一直按back键,直到回到主屏幕,那么所有的activity都会被移除堆栈,这个任务就不存在了。
一个任务是一个内聚的单元,当用户点击Home按钮或者开始一个新的任务时,先前的任务可以移动到“后台”。当这个任务处于后台时,任务中的activity都处于停止状态,但是后退堆栈仍然完整的保存着它们,只是失去了焦点而已。如下图所示:【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈
【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈一个任务可以从后台返回前台,以便用户可以从中断任务的地方重新开始。
提示:后台可以同时存在多个任务,但是系统在回收内存的时候可能会销毁一些后台的activity,所以一些后台的activity状态会丢失。
因为堆栈不会被重新排序,如果用户允许从多个地方启动一个特别的activity的话,堆栈中会出现同一个activity的不同实例,当用户点击back键的时候,这些实例都会被释放。不过你也可以避免这种情况,就是让activity同时只能被实例化一次,下面的章节会讨论到。【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈【Android API指南】App组件(五) - Activities(3) - 任务和回退堆栈
下面总结了activity和task的默认行为:当activity A开启activity B时,A被停止,系统保持A的状态。如果用户按back键退出B,A恢复状态。当用户按Home键离开一个任务,当前activity被停止,任务进入后台。系统保持任务中所有activity的状态。如果用户重新回到任务,那么任何回到前台,堆栈中顶部的activity恢复。如果用户按back键,当前activity被推出堆栈,然后被销毁。先前的activity被恢复。当一个activity被销毁了,系统将不再保持它的状态。Activity可以在不同的任务中被多次实例化。保存activity状态当activity被停止时,系统可能会销毁它,当是系统仍然知道这个activity在回退堆栈中,这种情况下,系统就必须重新创建这个activity,为了避免用户状态丢失,我们应该实现OnSaveInstanceState()方法。详细用法看activity章节。
管理任务你可能希望在每次启动一个程序中的activity时都开始一个新的任务,而不是继续当前任务,或者你想在启动一个activity时调用已经存在的实例,或者你希望用户离开任务时清空所有的回退堆栈。这些都可以用<activity>元素的属性来实现。
你可以使用下面这些主要的<activity>来实现:

读书人网 >Android

热点推荐