Android开发——Activity的四种加载模式(launch mode)

  上一篇博客我们说了Activity的生命周期,这次我们要说的是Activity的四种加载模式。我们可以在manifest.xml中每个activity的launch mode属性上设置。

  Activity的加载模式?什么意思?Activity的加载模式,就负责管理实例化、加载Activity的方式、并可以控制Activity与Task之间的加载关系。

  那么什么是Task?Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用入口Activity。Android并没有为Task提供API,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。其实我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。现在就好理解了吧。(这段我也是从别的地方借过来的)

  其实说那么多干嘛?我们可以简单的理解,activity的加载模式就是我们打开每一个页面,每一个activity的过程嘛。

  好了,现在我们开始把这四种加载模式一一列举出来说(我们通过栈的思路来说)。

standard

  standard是Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。

  尴尬,什么是Intent?我也忘了,忘了很正常嘛,重要的是我们能够重新去认识它,所以我重新找到了答案。Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。这样解释大家肯定还是一脸懵逼,我换一种方式来说。

  我们在学习中要学会的一个重要技能是联想记忆,联想学习。还记不记得我们上一篇博客里面用什么方式去从一个页面跳到另一个页面的?额,上一篇博客我是给了一个百度云链接,好吧,我就这样说吧,我们在页面跳转过程中是同过点击事件跳转的,然后我们的点击事件具体怎么跳转的呢?就是在这个事件上用了Intent,intent里面说让我们调用另一个activity的class,然后我们用startActivity这个方法调用intent,就可以实现页面的跳转了。这有点像是一个大管家。地主:“我还有钱没?”管家:“有,您还有**资金。”地主:“哦,我要去网购一件貂皮大衣,天气太冷了,给我钱。”然后管家就把钱给Activity了。

  我们说得有点多了,其实我们放下Intent不管standard还是很好理解的嘛中间的可以全部忽略。

singleTop

  如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。

  我们举个例子,如果我们有四个Activity,就A,B,C,D吧,我们从A到B一直到D跳一遍,然后当我们从D往我们前面的A,B,C跳的时候A,B,C就不会从新创建实例了。他们用以前的。

singleTask

  singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己。

  这个更好理解吧,如果以前这个Activity被创建过,那么它就把以前那个弄死,自己留下来。(说得有点凶残)

singleInstance

  将Activity压入一个新建的任务栈中。我们也用例子来讲吧。

  如果我们现在有四个Activity,还是A,B,C,D吧,我们把他们一个个跳过去,但是我们把D的launch mode设置为singleInstance,那么D就和其他的3个Activity不一样了,它在另一个task栈中了,这时候我们从D跳出来回到其他的activity中,那么他就不能再跳回到D了(世事无绝对,还是有办法的)。

你理解了Activity的四种加载模式吗?可以自己试试哦。下面是Activity加载模式的测试代码链接

 http://pan.baidu.com/s/1i4TLquD 突然想到一个大问题,百度云多久后会失效?

你可能感兴趣的:(Android)