android启动模式的应用程序,Android四大组件---Activity之启动模式及启动模式的应用场景...

4、Activity能够被实例化多次,甚至来自其他任务。

Activity的启动模式:

Activity有4种启动方式,分别是:      ①standard      ②singleTop      ③singleTask      ④singleInstance   可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity(造成占用手机内存)等问题。

设置Activity的启动模式,只需要在AndroidManifest.xml里对应的标签设置android:launchMode属性,如下:

android:name="com.lzy.androidstoragedemo.activity.HomeActivity"

android:launchMode="singleTask"

android:label="@string/app_name" >

android:launchMode="singleTop" >

下面就这四种模式做下总结性介绍:

standard(系统默认的启动方式):这种启动模式是Activity的“标准启动模式”,也是Activity的默认启动模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加,因此一般情况下我们不采用这样的启动方式,这样不但重建Activity对象造成耗时,而且也会造成内存的浪费。singleTop:如果在任务的栈顶正好存在该Activity的实例,就重用该实例,而不会创建新的Activity对象,不过它会调用onNewIntent()方法。如果栈顶部不存在就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。会回调onNewIntent()方法。

应用场景:从上面的介绍中,我们可以推断出singleTop启动模式适合于一些不常用的Activity页面,比如“找回密码”、“设置界面”等。singleTask:

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检 测到的我们需要的Activity置为栈顶。

应用场景:其在App内部适合作为程序入口点。从上面的介绍可以看出我们的App项目中调用较多的Activity页面使用于该启动模式,在项目中我们哪个Activity用的多?当然是首界面HomeActivity调用的较多,因此在首界面Activity的启动模式适用于改启动模式。当然其他利用较多的Activity也应该设置为该启动模式。

singleInstance:

与singleTask模式的区别是存放singleInstance模式窗口对象的回退栈不能有其他任何窗口对象。因此如果该窗口不存在,则要新建任务Task来存放该singleInstance模式窗口。也就是说getTaskId()会发现任务id发生了变化。

此启动模式和我们使用的浏览器工作原理类似,在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

应用场景:singleInstance有一个重要的作用:作为外部App调用自己客户端程序的入口。比如说,使用微信调起自己的客户端某个页面,不做任何处理的情况下,按下回退或者当前Activity.finish(),页面不会停留在自己的客户端而是返回到微信的客户端页面。但是如果这个页面的启动模式设置为singleTask,当按下返回键或者Activity。finish(),页面都会停留在自己的客户端(因为自己的Application回退栈不为空),这明显不符合逻辑的。产品的要求是,回退必须回到微信客户端,而且要保证不杀死自己的Application.因此,显然其他的其他的启动模式都不具备这个功能。

OK,本篇博文到此结束,如有写的不准确地地方还请多多指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值