现在的位置: 首页 > 综合 > 正文

android启动模式

2013年08月18日 ⁄ 综合 ⁄ 共 1696字 ⁄ 字号 评论关闭

Activity加载模式
standard: 
标准模式,一调用startActivity()方法就会产生一个新的实例。 对于每一个启动Intent都会生成一个activity的新实例.
跳转源和目的activity为同一个taskid

singleTop: 
 当activity被设置为singleTop的加载模式时,如果堆栈的顶部已经存在了该Activity,
那么,它便不会重新创建,而是调用onNewIntent。如果,该Activity存在,但不是在顶部,那么该Activity依然要重新创建.
跳转源和目的activity为同一个taskid

singleInstance:
设置为该模式的activity将独立创建一个 task,并且独享该taskid.
其所在栈的唯一activity,它会每次都被重用。其它activity不能存在那个task里.
当发现已经存在一个Task中包含自己的实例时,它会调用自己的onNewIntent。
eg: a(taskid=1)->b(sinleInstance,taskid=2)-->c(taskid=1)
如果a在跳转到b后自己调用了finish()方法,则c的taskid=3
跳转源和目的activity的taskid一定不相同

singleTask: 
eg: a(taskid=1)->b(singleTask,taskid=1)
设置为singleTask模式的activity并不一定总是新开一个taskid.
当它不是app的启动面时,将和启动面taskid相同.
但是将非启动面设置为该模式要注意数据丢失问题.
因为很有可能是a为欢迎页面,初始化等耗时工作完成后调用b.并自宫a(finish方法)
这时候当系统回收内存后,在home面重新进入程序的时候,a中被初始化的数据将丢失.
因为a已经被自宫,导致初始化数据丢失.
当singleTask模式的Activity启动时,如果发现在某个Task中已经存在,那么它会先将该它上部的销毁,然后调用它的onNewIntent函数。

 

Activity状态:
活动的:
当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。
当另外一个Activity被激活,这个将会被暂停。

暂停:
在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。
当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。
在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。
当一个Activity变为完全隐藏,它将会变成停止。"

停止:
当一个Activity不是可视的,它“停止”了。
这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。
当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。

待用:
在一个Activity被杀死后和被装载前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。

Intent:
Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。

FLAG_ACTIVITY_REORDER_TO_FRONT
如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。

FLAG_ACTIVITY_NEW_TASK

 

FLAG_ACTIVITY_CLEAR_TOP 
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 
FLAG_ACTIVITY_SINGLE_TOP  

 

android:taskAffinity

抱歉!评论已关闭.