launch mode 启动模式

 
 
  原由:因为Activity 都是由Task(栈)来管理的,1任务栈和2返回堆栈
 
 
           
 
  1. android:launchMode="standard"
    可以存在多个实例,这是默认的启动模式,系统总是会在目标栈中创建新的activity实例。
  2. android:launchMode="singleTop"
    如果这个 activity 实例已经存在目标栈的栈顶,系统 会调用这个 activity 中的 onNewIntent()方法,并传递 intent,而不会创建新的 activity 实例 ;如果不存在这个 activity 实例或者 activity 实例不在栈顶,则 SingleTop 和 Standard 作用是一样的。
  3. android:launchMode="singleTask"
    不会存在多个实例,如果栈中不存在 activity 实例,系统会在新栈的根部创建一个新的 activity; 如果这个 activity 实例已经存在,系统会调用这个 activity 的 onNewIntent() 方法而不会创建新的 activity 实例
  4. android:launchMode="singleInstance"
    这种启动模式比较特殊,因为它会启用一个新的栈结构,将 Acitvity 放置于这个新的栈结构中, 并保证不再有其他 Activity 实例进入 ,除此之外,SingleInstance 模式和 SingleTask 模式是一样的。
 

 

为什么要有启动模式?
 
因为在Android中,启动一个Activity有时需要创建一个新的对象,有时需要复用已有的对象
 
①standard:标准模式、默认模式
含义:每次启动一个Activity就会创建一个新的实例。
注意:使用ApplicationContext去启动standard模式Activity就会报错。因为standard模式的Activity会默认进入启动它所属的任务栈,但是由于非Activity的Context没有所谓的任务栈。
生命周期: 每次创建的实例Activity 的生命周期符合典型情况,它的 onCreateonStartonResume都会 被调用
应用场景:应用与大多数的Activity

 

 

②singleTop:栈顶复用模式
含义:分两种处理情况:需要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样。
生命周期:若情况一中栈顶的Activity被直接复用时,它的onCreate、onStart不会被系统调用,由于它并没有发生改变。可是一个新的方法 onNewIntent会被回调(Activity被正常创建时不会回调此方法)。
应用场景:假设你在当前的Activity中又要启动同类型的Activity,此时建议将此类型Activity的启动模式指定为 SingleTop,能够降低Activity的创建,节省内存

 

 

③singleTask:栈内复用模式
含义:若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
生命周期:同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法
应用场景: 保持我们应用开启后仅 仅有一个 Activity的实例。最典型的样例就是应用中展示的主页(Home页)。
假设用户在主页跳转到其他页面,运行多次操作后想返回到主页。

 

 

④singleInstance:全局单例模式
含义:是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。
应用场景:这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值