目录
1.android:alwaysRetainTaskState
2.android:clearTaskOnLaunch
3.android:configChanges
4.android:excludeFromRecents
5.android:finishOnTaskLaunch
6.android:launchMode(Activity加载模式)
7.android:multiprocess
8.android:noHistory
9.android:screenOrientation
10.android:stateNotNeeded
11.android:windowSoftInputMode
Activity通常是应用程序中的单个屏幕,每个Activity都是作为扩展Activity基类的单个类来实现的。移动转换到另外一个屏幕界面是通过开始一个新的Activity来实现的。在某些情况下,一个Actiivit可能会返回一个值回到前一个Activity界面。当一个新的屏幕打开时,前一个屏幕会暂停并推送到历史堆栈里。Android系统保留了从主屏幕启动的每一个应用程序的历史堆栈,因此用户可以通过历史打开的屏幕向后导航。如果不需要保留,也可以选择从历史堆栈中删除界面。
接下来介绍Activity的属性。
是否保存状态不变。例如:切换Home,在重新打开,则Activity处于最后的状态。当一个浏览器拥有很多状态(当打开多个TAB),用户并不希望丢失这些状态时,可将此设置为true。
用来表明当再次启动Task时,系统是否会清除了跟Activity以外的所有Activity,默认值是false.
可以在manifest.xml文件中指定Android参数configChanges,用于捕获手机状态的改变,如屏幕方向(orientation)的变化。在Activity中添加了android:configChanges属性后,当所指定的属性发生改变时,会通知程序调用onConfigurationChanged()函数。设置方法是将字段用“|”符号分隔开,如“locale|navigation|orientation”.在Android默认情况下,当oritaiton变化时会销毁Activity,然后创建新的Activity。如果不希望重新创建Activity,可以在AndroidManifest..xml中配置Activity:
是否可被显示在最近打开的Activity列表里。默认值是false.
当用户重新启动这个任务时,是否关闭已打开的Activity。默认值是false。
这个属性与上面的clearTaskOnLaunch很像,不过它是指单个Activity,而不是整个栈。当设置为true时,Task重启后,这个 Activity就不显示了。默认值是false。
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。如果希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这就需要为Activity配置特定加载模式,而不是使用默认的加载模式。
Activity有中加载模式:standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组)。默认为standard。
standard:这是个默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,每次跳转都会生成新的Activity,次模式下可以有多个相同的实例,也允许多个相同的Activity叠加。
singleTop:也是发送新的实例,但singleTop不同于standard的一点是,当请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例。
singleTask:和后面的singleInstance为一组,都只会创建一个实例。当Intent到来,需要创建设置为singleTask的Activity时,系统会检查栈中是否已经有该Activity的实例,如果有则直接将Intent发送给它。
singleInstance:首先说明一下Task这个概念,Task可以被认为是一个栈,可存放多个Activity。例如,如果要启动一个应用,Android会创建一个Task,随后这个应用的入口即被启动,如果调用其他Activity也在同一个Task里面。如果在多个Task中共享一个Activity该如何处理呢?举个例子,如果开启一个导航服务类的应用程序,里面有一个Activity是开启Google地图的,当按下Home键退出回到主菜单又启动Google地图的应用时,显示的就是刚才的地图,这实际上是因为他们是同一个Activity,即引入了singleInstance。singleInstance模式下就是将Activity单独放在一个栈中,这个栈中只有这一个Activity,不同应用的Intent都这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,按下Home键即保存了这些应用,如果按下返回键,则无效。
是否允许许多进程。默认值为false。
当用户从Activity上离开并且它在屏幕上不再可见时,Activity是否从Activity stack中清除并结束。默认值是false,Activity不会留下历史痕迹。
Activity显示的模式。默认值是unspecified。系统自动判断显示方向,landscape为横屏模式,宽度比高度大;portrait为竖屏模式,高度比宽度大。user模式:用户当前首选的方向。beind模式:和该Activity下面的那个Activity大方向一致(在Activity堆栈中)。ensor模式:由物理的感应器来决定,如果用户旋转设备则屏幕会横竖屏切换。nosensor模式:忽略物理感应器,这样就不会随者用户旋转设备而更改了。
Activity被销毁或成功重启时是否保存状态。
Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题。
通常情况下,Activity有三种状态:当屏幕前台时,响应用户操作的Activity,处于激活或运行状态;当它上面有另外一个Activity,使它失去焦点但仍然对用户可见时,处于暂停状态;当它完全被另外一个Activity覆盖则处于停止状态。Activity从一种状态转变到另一种状态时,会调用其生命周期方法。Activity一共7中生命周期方法具体如下表1-1所示。
方法名 | 说明 |
void onCreate() | 设置布局及进行初始化操作 |
void onStart() | 可见,但不可交互 |
void onRestart() | 调用onStart() |
void onResume() | 可见,可交互 |
void onPause() | 部分可见,不可交互 |
void onStop() | 完全不可见 |
void onDestory() | 销魂 |
startActivity开启一个Activity时,生命周期执行的方法是:onCreate()->onStart()->onResume()
单击Back键关闭Activity时,生命周期执行的方法是:onPause()->onStop()->onDestory()
当开启一个新的Activity(以对话框形式),新的Activity把后面的Activity盖住一部分时,后面的Activity的生命周期执行的方法是:onPause()注意,指定Activity一对话框的形式显示,需要在Activity节点追加以下主题Android:theme="@android:style/Theme.Dialog"。
当把新开启的Activity(以对话框形式)关闭时,后面的Activity的生命周期执行方法是:onResume()。
当把新开启的Activity,把后面的Activity完全盖住时,生命周期执行的方法是:onPause()->onStop()。
当把新开启的Activity(完全盖住)关闭时,生命周期的执行方法是:onRestart()->onStart()-onResume()