AndroiManifest.xml之Activity (一、关于activity启动模式、属性及Flag的进一步理解)
来源:互联网 发布:平面设计软件价格表 编辑:程序博客网 时间:2024/05/11 18:54
最近好好研究了索尼的系统的闹钟骨架,其中有不少值得总结的,其中一点就是AndroiManifest.xml之Activity。
Activity有很多属性,仔细研究研究,还是很有用的,特别是其启动模式,能有效的帮助我们理解Task栈。
*先简述几个基本的属性比如:
1. name:activity的标识(相当于键值对中的key)
2. theme:从字面就能理解,就是你这个activity的主题,一般是通过引用@style/...来定义的(这里面的东西很多,理解容易,熟练运用必须得亲自操刀)
3. icon:图标,就是曾经title栏左上角的那个,当Activiy在任务栈顶的时候显示,通俗讲,就是在设备上能看见这个activity的时候显示。不过自从ActionBar袭来,这个玩意就没太大用了,因为ActionBar过于强大。
4. label:曾经的title栏中的文字,同上,一般就在图标的右边,现在也是被ActionBar取代了,至少索尼的代码都是这样干的。
5. configChanges: 简单来说就是能让手机在旋转或者弹出和隐藏软件盘等的时候,Activity会调用onConfigurationChanged()方法,以达到不再次调用onCreate()方法而提高程序效率的目的。详细可以看这篇博客:http://www.cnblogs.com/wisekingokok/archive/2011/10/06/2199948.html
6. uiOptions:这玩意只需记住把这行代码就行android:uiOptions="splitActionBarWhenNarrow",意思就很明显了,当空间狭窄的时候,actionBar中的item就会被分割。比如有一些应用进去后,顶部是几个导航的tab,然后底部是一些item,这就是用了它。在比如说,微信5.2,其界面就是没有使用这个属性,如果使用了,那么右上角的这几个Item就会被分到底部去。而索尼4.3的闹钟布局就是用了这个属性,这属性是在API Leave 14 加入的。
7. alwaysRetainTaskState:这个属性也是可以通过字面意思来理解的,就是始终保留任务栈的状态,通俗点就是说,打开一个应用后home出去了,不管时间多长,系统都不会杀了它,回到应用后该任务栈中的所有activity都会保留。当然你要设置root Activity的这个属性为true,如果为false或不设置,那么当内存不足时系统就会从新初始化这个Task了,只会保留root Activity,其他的一律干掉。因为Android中当系统内存不足的时候,其就会杀进程,所以后台的进程我们就不能控制其生死了,而这个属性就是用来干这个事的。
8. clearTaskOnLaunch: 和 alwaysRetainTaskState 属性正好相反,如果设置为“true”,在程序从后台再次回来的时候,除了root Activity之外的所有Activitys将全部清栈。
9. finishOnTaskLaunch:就是单个activity的移除,设置为true时,home出去,然后在回来,那么这个activity就一定会从栈中移除,默认值是false。
总结下,这些只是一些常用的activity中的基本属性,在Androidmanifest.xml文件中申明activity时使用,具体的根据需求而定。
*Activity中比较重要的属性:
launchMode:
activity的launchMode
1、standard
1)每次启动Activity时,都会创建该Activity的新实例
2)总是在当前任务中启动Activity的新实例
3 ) 一个任务中可以包含同一Activity的多个实例
4)同一Activity的多个实例 可以位于多个任务中
2、singleTop
1)当该Activity不位于栈顶时,其表现与标准模式一致
2)当该Activity位于栈顶时,再次启动该Activity不会创建新的实例
而是调用onNewIntent方法将启动意图传入处理,然后在使该实例
重新进入交互状态
3、singleTask(Sony的Settings、Alarm都用这种启动模式)
1)当该Activity启动时,首先判断当前任务的亲族值(taskAffinity)是否与该Activity的亲族值相同
如果相同则在当前任务中创建实例,否则在新的任务中创建实例
注:默认不设置亲族值,那么每个Task的亲族值都一样。
2)设置为singleTask的Activity是单例的。
3)当重新启动该Activity时,首先将任务栈中位于其上的其他Activity销毁,再
使该Activity进入交互状态
4、singleInstance
1) 设置为singleInstance的Activity是单例的。
2)该Activity不与其他Activity共存于同一任务中(假设为A任务)
所以创建该Activity实例一定是在新的任务中 (假设为B任务)
当通过该Activity启动其他Activity时,首先判断
是否存在与被启动Activity亲族值相同的任务,如果存在
则在该任务中创建Acitivity的实例,否则在新的任务中 (假设为C任务)
创建实例
这端话的意思就是说:当你进入一个应用时,开辟了A任务,然后当点击一个启动模式为singleInstance的Activity B 的时候,那么该Activity B 就一定会开辟任务B,然后在从该Activity B 启动其他 Activity C 的时候,那么就会判断Activity C 的亲族值和任务B的亲族值(其实就是Activity B 的亲族值)是否相同,如果相同,Activity C 就会在B任务中创建,否则开辟任务C,作为根Activity来创建实例。
- AndroiManifest.xml之Activity (一、关于activity启动模式、属性及Flag的进一步理解)
- Activity启动模式及Intent的Flag属性对Intent传值的影响
- Android 之Activity启动模式(二)之 Intent的Flag属性
- Android 之Activity启动模式(二)之 Intent的Flag属性
- Activity启动模式与FLAG及TaskAffinity
- Activity启动模式及Intent 常用Flag
- 关于Activity的启动模式(一)
- Activity的启动模式与flag详解及Task
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- Activity的启动模式与flag详解
- 调色板
- MYSQL游标
- Java基础_数组
- Security Descriptor String Format
- 集合
- AndroiManifest.xml之Activity (一、关于activity启动模式、属性及Flag的进一步理解)
- Leetcode_ Binary Tree to Linked List
- LeetCode OJ --问题与解答 Max Points on a Line
- 汇编语言子程序调用call和ret
- xp系统中如何修复浏览器打不开的问题
- linux系统管理(2)---查看硬件信息
- 栈溢出攻击
- Python 暴力破解武汉大学图书馆密码程序
- TCP与UDP的区别