Android中Activity的启动模式?

Activity的四种启动模式

在清单文件中声明Activity时,可以使用元素的launchMode属性指定Activity应该如何与任务关联.launchModel属性指定有关应如何将Activity启动到任务的指令,有四种

  • 1.standard(默认模式)
    默认,系统在启动Activity任务中创建Activity的新实例并向其传送Intent.Activity可以多次实例化,而每个实例均均可属于不同的任务,并且一个任务可以拥有多个实例.

  • 2.singleTop(栈顶复用模式)
    如果当前任务的顶部已存在Activity的一个实例,则系统会通过调用该实例的onNewIntent()方法向其传送Intent,而不是创建Activity的新实例.Activity可以多次实例化,而每个实例均可属于不同的任务,并且一个任务可以拥有多个实例(但前提是位于返回栈栈顶的Activity并不是Activity的现有实例).

    例如:假设任务的返回栈包含根Activity A以及Activity B,C和位于顶部的D(堆栈是A-B-C-D;D位于顶部).收到针对D类Activity的Intent.如果D具有默认"standard"启动模式,则会启动该类的新实例.且堆栈会变成A-B-C-D-D.但是,如果D的启动模式为"singleTop",则D的现有实例会通过onNewIntent()接受Intent,因为它位于堆栈的顶部;而堆栈仍为A-B-C-D.但是,如果针对B类Activity 的Intent,则会向堆栈添加B的新实例,即便其启动模式为"singleTop".

  • 3.singleTask(栈内复用模式)
    系统创建新任务并实例化位于新任务底部的Activity.但是如果另外的任务中已存在该Activity的实例,则系统会通过调用其onNewIntent()方法将Intent传送到该现有实例,而不是创建新实例.Activity一次只能有一个实例存在.
    也就是说:若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。该模式默认具有clearTop的效果.

  • 4.singleInstance(单实例模式)
    与"SingTask"相似,唯一不同的是系统不会将任何其他Activity启动到包含该实例的任务中.该Activity始终是其任务唯一的成员;由该Activity启动的任何Activity都会在其他的任务中打开.可以将他看成是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中


除了在清单文件中声明之外,还可以通过在传递给startActivity()的Intent中加入相应的标志,修改Activity与其任务的默认关联方式.也有四种:

  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  • FLAG_ACTIVITY_NEW_TASK
    会产生与"singleTask" launchModel相同的效果
  • FLAG_ACTIVITY_SINGLE-TOP
    会产生与"singleTop" launchModel相同的效果
  • FLAG_ACTIVITY_CLEAN_TOP
    具有此标记位的Activity,启动时会将与该Activity在同一任务栈的其他Activity出栈。一般与SingleTask启动模式一起出现。它会完毕SingleTask的作用。但事实上SingleTask启动模式默认具有此标记位的作用

FLAG_ACTIVITY_CLEAR_TOP 通常与 FLAG_ACTIVITY_NEW_TASK 结合使用。一起使用时,通过这些标志,可以找到其他任务中的现有 Activity,并将其放入可从中响应 Intent 的位置

  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
    具有此标记位的Activity不会出如今历史Activity的列表中,使用场景:当某些情况下我们不希望用户通过历史列表回到Activity时,此标记位便体现了它的效果。它等同于在xml中指定Activity的属性:
android:excludeFromRecents="trure"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值