标签:affinity android中 clear cti 后台 天气 忘记 为什么 roi
在android中控制Activity的启动模式的属性主要控制两大功能:
1,控制activity 进入哪一个任务task 中, 有三种可能,进入老任务task中,进入指定taskAffinity的task中,进入新task中
2,控制activity 多次启动的处理模式, 有三种可能,每次都创建新的,如果在顶部不创建新的, 如果存在则清除之上所有的activity
Activity的启动模式中多次启动的处理模式要先确定activity进入的task
在<activity>元素中launchMode,taskAffinity两个属性控制activity的启动模式
singleTop 进入老task,如果已有实例并且在task顶部不创建新实例,执行实例的onNewIntent(),其它情况都创建新的实例进入task顶部
而在Intent当中,flag属性控制activity的启动模式:
FLAG_ACTIVITY_NEW_TASK 进入指定taskAffinity的task,如果指定的task存在,将task移到前台,如果指定task不存在,创建指定taskAffinity的task
每次都创建新的进入task顶部
FLAG_ACTIVITY_SINGLE_TOP 进入老task
如果已有实例并且在task顶部不创建新实例,执行实例的onNewIntent(),其它情况都创建新的实例进入task顶部
FLAG_ACTIVITY_CLEAR_TOP 进入老task
如果task中存在实例,则移除实例之上的所有实例,如果启动的activity启动模式不是standard模式,或者flag有FLAG_ACTIVITY_SINGLE_TOP属性
那么调用Activity B的onNewIntent()方法否则销毁原有实例创建新实例进入task顶部,其它情况则创建实例进入task顶部
对activity的启动模式属性中Intent的flag属性覆盖<activity>元素中属性设置;
在<activity>元素中,有以下几个属性是可以使用的:
而在Intent当中,有以下几个flag是比较常用的:
affinity可以用于指定一个Activity更加愿意依附于哪一个任务,在默认情况下,同一个应用程序中的所有Activity都具有相同的affinity,所以,这些Activity都更加倾向于运行在相同的任务当中。当然了,你也可以去改变每个Activity的affinity值,通过<activity>元素的taskAffinity属性就可以实现了。
taskAffinity属性接收一个字符串参数,你可以指定成任意的值(经我测试字符串中至少要包含一个.),但必须不能和应用程序的包名相同,因为系统会使用包名来作为默认的affinity值。
affinity主要有以下两种应用场景:
如何用户将任务切换到后台之后过了很长一段时间,系统会将这个任务中除了最底层的那个Activity之外的其它所有Activity全部清除掉。当用户重新回到这个任务的时候,最底层的那个Activity将得到恢复。这个是系统默认的行为,因为既然过了这么长的一段时间,用户很有可能早就忘记了当时正在做什么,那么重新回到这个任务的时候,基本上应该是要去做点新的事情了。
当然,既然说是默认的行为,那就说明我们肯定是有办法来改变的,在<activity>元素中设置以下几种属性就可以改变系统这一默认行为:
alwaysRetainTaskState
如果将最底层的那个Activity的这个属性设置为true,那么上面所描述的默认行为就将不会发生,任务中所有的Activity即使过了很长一段时间之后仍然会被继续保留。
clearTaskOnLaunch
如果将最底层的那个Activity的这个属性设置为true,那么只要用户离开了当前任务,再次返回的时候就会将最底层Activity之上的所有其它Activity全部清除掉。简单来讲,就是一种和alwaysRetainTaskState完全相反的工作模式,它保证每次返回任务的时候都会是一种初始化状态,即使用户仅仅离开了很短的一段时间。
finishOnTaskLaunch
这个属性和clearTaskOnLaunch是比较类似的,不过它不是作用于整个任务上的,而是作用于单个Activity上。如果某个Activity将这个属性设置成true,那么用户一旦离开了当前任务,再次返回时这个Activity就会被清除掉。
标签:affinity android中 clear cti 后台 天气 忘记 为什么 roi
原文地址:http://www.cnblogs.com/ldq2016/p/6893471.html