Friday, November 13, 2015

Android 加载模式的思考

启动模式,我觉的还是很重要的东西,很多东西需要研究,但是你会发现我们没有那么多的时间来做! 所以抓住现在的时光就好了!

我们最常用的加载模式:

Standard  标准模式,
默认状态下是是该模式,该状态下的,每当我们使用Intent, 开启一个Activity 的时候,都会在当前的Activity  Stack(栈)中加载一个Activity的实例, 之前有重复的也会添加。

SingleTop
如果指定该模式的状态下,当我们需要添加新的Activity的实例的时候,当前的栈的对顶部的实例就是我们要加载的Activity的时候,就会直接显示,不在创建了。

SingleTask
如果你需要添加新的Activity,  这个时候 Dalvik 会为我们的新的Activity创建一个新的栈来存储。在其上面可能存在其它的activity组件,所以它的位置并不是栈顶,在这种情况下,intent对象会被丢弃。

SingleInstance
这种方式最简单的,一个栈只有一个Activity, 傲娇的小公主!

====================================================================
“singleTop"要求如果创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

“singleTask”和”singleInstance”则限制只生成一个实例。====================================================================

我们也可以通过给Intent 设置 FLAG 的方式:
Using Intent flags

当开启一个activity时,可以通过在intent中包含标志来修改activity的默认的与当前task的关联,然后将该intent传递给startActivity().可以修改的默认的标志为:

FLAG_ACTIVITY_NEW_TASK
在一个新的task中开启一个activity。如果包含该activity的task已经运行,该task就回到前台,activity通过onNewIntent()接受处理该intent。
这是与"singleTask"登录模式相同的行为。

FLAG_ACTIVITY_SINGLE_TOP
如果要被开启的activity是当前的activity(在返回栈的顶部),已经存在的实例通过onNewIntent()接收一个调用,然后处理该intent,而非重新创建一个新的实例。
这与"singleTop"登录模式有相同的行为。

FLAG_ACTIVITY_CLEAR_TOP
如果要被开启的activity已经在当前的task中运行,系统不会生成该activity的一个新的实例,在该栈顶部的所有其他的activity会被销毁,这个intent通过 onNewIntent()被传递给该重新运行的activity的实例(现在在栈顶部)。
manifest中没有相对应的属性。

FLAG_ACTIVITY_CLEAR_TOP经常和FLAG_ACTIVITY_NEW_TASK一起使用.当一起使用时,这些标志可以确定一个存在的activity在另一个task中的位置,并且将其放置于可以响应intent的位置(FLAG_ACTIVITY_NEW_TASK确定该activity,然后FLAG_ACTIVITY_CLEAR_TOP销毁顶部其他的activity)。如果指定的activity的登录模式是"standard",也会被从栈中移除,一个新的实例也会被登录到它的位置来处理到来的intent。那是因为当登录模式为 "standard"时,一个新的实例总是被创建




reference:

1   四种模式的个人简介
http://www.cnblogs.com/blueofsky/archive/2011/12/19/2293575.html

http://blog.csdn.net/guolin_blog/article/details/41087993







No comments:

Post a Comment