Activity中AndroidMainfest启动模式

本文详细介绍了AndroidManifest文件中定义的四种Activity启动模式:standard、singleTop、singleTask和singleInstance,包括各自的工作原理和应用场景。例如,singleTop适合用于聊天应用接收消息的Activity,singleTask可用于实现退出整个应用的功能,而singleInstance则会在单独的任务栈中运行。此外,还提到了如何通过AndroidManifest或Intent设置启动模式及其区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity中AndroidMainfest启动模式

Android开发者在AndroidMainifest文件中一共设计了四种启动模式:standard,singleTop,singleTask,singleInstance。想要应用这些启动模式,需要在权限文件中中加入<activity android:launchMode=“”>,引号内添加这几种启动模式。本篇博客会一一讲解这四种模式。

1.standard

    它是默认的启动模式,在权限文件中不指定Activity的启动模式的时候,activity会使用这种方式启动activity,这种启动模式每次都会创建新的实例,每次创建新的Activity之后,就会覆盖在原有的Activity之上。

2.singleTop

    当在权限文件中设置Activity启动模式为singleTop,那么在启动的时候,系统会判断栈顶是不是要启动的Activity,如果是则不创建新的Activity直接引用这个,如果不是会重新创建新的Activity。

    开发过程中应用实例:一个聊天app,在接收到消息后弹出Activity,我们对这个Activity应该设置为这种启动模式,因为不能每一次来消息都要重新创建一个Activity,这么设置启动模式就解决了这个麻烦。

3.singleTask

    singleTask,在同一个APP中启动SingleTask的Activity,检查整个Activity栈中是否存在当前需要启动的Activity。如果存在,则将该Activity以上的Activity进行销毁。

    如果是是在其他程序以singleTask模式来启动这个Activity,它将创建一个新的任务栈,这里需要注意是,如果启动的模式为SingleTask的activity已经在后台的一个任务栈中了,那么启动后,后台的这个任务栈将一起被切换到前台中。

    开发过程中应用实例:用来退出整个应用的启动模式。主activity设为这种启动模式,要退出的Activity都会转到主Activity,这时候它会变为栈顶,它之上的Activity都会被消除,然后退出程序,将这最后一个Activity结束掉。(注意会有一个onNewIntent的使用)

4.singleInstance

    启动模式为singleInstance的Activity会出现在一个新的任务栈中,而且该任务栈中只存在一个Activity。笔者对于这种情况用的还比较少,欢迎大家给予评论、指点。

  

注意:

1.栈结构,是一种后进先出的线性表。正常情况下的android任务栈,新启动的Activity会被置于任务栈的顶端,处于活动状态,启动它的Activity仍然会保留到任务栈中,处于停止状态,当用户按返回键或者调用finsh()方法的时候,系统会移除顶部的Activity,让下面的Activity变成活跃状态。这是正常的状态,但是上面说的四种启动模式都是在权限文件AndroidMainifest中进行了设置,拥有特权。

2.如何给Activity指定启动模式

两种方式一,一种是通过AndroidMenifest,一种是通过在Intent中设置标志位为Activity指定启动模式

代码如下:

<activity
   android:name="com.sweety.SecondAct"
   android:configChanges="screenLayout"
   android:launchMode="singleTask"
   android:label="@string/app_name"/>

Intent intent=new Intent();
intent.setClass(MainAct.this,SecondAct.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

那么两种方式的区别是什么?首先优先级上第二种方式的优先级高于第一种方式,两种方式同时存在的时候以第一种方式为准;两种方式在限定范围上有所不同,例如,第一种方式无法直接为Activity设置FLAG_ACTIVITY_CLEAR_TOP,第二种无法为Activity指定singleInstance。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值