活动定义及基本用法
活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互。
活动的生命周期
返回栈
Android使用任务管理活动,一个任务即一组存放在栈里的活动的集合,这个栈也被称为返回栈。每当按下Back建或调用finish()方法销毁一个活动,处于栈顶的活动就会出栈。
活动状态
每个活动在其生命周期中最多为4种状态:
- 运行状态:处于返回栈栈顶的活动即处于运行状态;
- 暂停状态:不处于栈顶但仍可见的活动处于暂停状态;
- 停止状态;不处于栈顶且完全不可见的活动处于停止状态;
- 销毁状态:活动从返回栈中移除后就编程销毁状态;
活动的生存期
Activity类中定义了7个回调方法,覆盖活动声明周期的每个环节:
- onCreate():每个活动中都重写该方法,在活动第一次被创建时调用,用于完成活动的初始化操作,如加载布局、绑定事件;
- onStart():在活动由不可见变为可见时调用;
- onResume():活动处于运行状态,准备好与用户进行交互时调用;
- onPause():在系统准备启动或恢复另一活动时调用;
- onStop():在活动完全不可见时调用;
- onDestroy():在活动被销毁之前调用,之后活动将变为销毁状态;
- onRestart():在活动由停止状态变为运行状态之前调用,即活动重新被启动;
活动可以分为3种生存期:
- 完整生存期:活动在onCreate()和onDetroy()之间所经历的,即为完整生存期;
- 可见生存期:活动在onStart()和onStop()之间经历的,即为可见生存期。在此期间,活动对于用户总是可见的,可能无法与用户进行交互;
- 前台生存期:活动在onResume()和onPause()之间经历的,即为前台生存期。在此期间,活动总是处于运行状态,可与用户进行交互;
活动的启动模式
启动模式一共有4种,standart、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给
1. standard
standard是活动默认的启动模式,该模式下,每当启动一个新的活动,就会在返回栈中入栈,并处于栈顶的位置。每次启动standard模式的活动,系统都会创建该活动的一个新的实例。
2. singleTop
singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例,不过当活动不处于栈顶时,再次启动该活动,会创建新的实例。
3. singleTask
singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
4. singleInstance
singleInstance,会启用一个新的返回栈来管理这个活动,则不管哪个应用程序来访问该活动,都会共用同一个返回栈,也解决了共享活动实例的问题。
程序中有两个返回栈,在按下Back回退时,先将当前栈顶活动出栈,并显示栈中的栈顶活动,直到栈清空后,才能显示另一个栈中的栈顶活动。
活动的最佳实践
知晓当前是哪个活动
创建一个普通Java类,让其继承所有活动的父类,并修改其称为项目中所有活动的父类,该类的onCreate()设计如下:
随时退出程序
创建一个ActivityCollector类作为活动管理器对所有活动进行管理。每个活动创建后加入List,每个活动删除后从List移除。由于声明的是静态变量及函数,因此在调用时直接用ActivityCollector.add()即可。
启动活动的最佳写法
在活动中定义一个静态函数,用于设置Intent中的参数,并在创建该活动的函数中调用该静态函数。
onCreate()
当Activity非正常销毁之后,如内存不足导致的后台自动销毁,为了保护数据可以将数据保存在saveInstanceState中,当Activity重启数据依旧不会消失,可以通过重载onSaveInstanceState或者onRestoreInstance重新获得。