Android开发:Activity启动模式

一、启动模式介绍

  启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的Android:launchMode属性设置;

  启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

二、任务栈

       为了记录用户开启了那些activity,记录这些activity开启的先后顺序,google引入任务栈(task stack)概念,帮助维护好的用户体验。每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序。

三、启动模式

1、standard:默认模式

每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;

如图:无论是否存在Activity2,激活Activity2时,会在栈顶创建一个新的Activity,当返回时,会一级

一级返回。

适用于绝大大数情况

id="iframe_0.3029184346091274" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646152.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.3029184346091274',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 706px; height: 419px;">

2、singleTop:单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例(不能创建

自身,不能重叠)而是调用 onNewIntent() 方法;其余情况都要创建Activity实例。

如图:栈顶是Activity2,当再次激活Activity2时,不会创建新的实例。

应用场景: 浏览器书签。 避免栈顶的activity被重复的创建,解决用户体验问题。

id="iframe_0.421656694385504" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646153.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.421656694385504',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 701px; height: 416px;">

3、 singletask 单一任务栈 , activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务

栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并

且清空这个activity任务栈上面所有的activity
              应用场景:浏览器activity, 整个任务栈只有一个实例,节约内存和cpu的目的
              注意: activity还是运行在当前应用程序的任务栈里面的。不会创建新的任务栈。

id="iframe_0.04949419565017732" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646154.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.04949419565017732',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 703px; height: 418px;">

4. singleInstance  单态 单例模式
              单一实例,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity共享 公用的同一个

activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。
              应用场景:呼叫来电界面 InCallScreen

id="iframe_0.6398007890564588" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://www.linuxidc.com/upload/2012_07/120721093646155.gif?_=3170591%22%20style=%22border:none;max-width:905px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.6398007890564588',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 555px; height: 709px;">

 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值