首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

16.Android-activity生命周期与启动模式

暂停状态 如果一个活动失去了焦点,但仍然可见(也就是说,一个非全尺寸或透明活动将焦点放在了活动顶部),那么它将被暂停。...: onStart ()之后或者取消暂停后,会调用该方法 onRestart() : 取消停止后,会调用该方法 onPause() : 另个非全尺寸或透明活动将焦点放在了活动顶部,那么该活动就会进入暂停状态...这样其实非常耗资源,并且每个相同activity都是独立实例(数据分开),会给用户带来困扰,为了了解决这一问题,Android为Actiivty提供了启动模式launchMode 启动模式launchMode...Manifest中配置如下: android:launchMode="singleTask" 用于该模式常见activity比如有:主界面activity 2.4 singleInstance单例模式...Manifest中配置如下: android:launchMode="singleInstance" 用于该模式常见activity比如有:浏览器界面activity(任何界面都可以去调用它访问网页)

55910

掌握这10个Android LaunchMode问题,面试轻松搞定

singleTask: 适用于全局单例模式,比如主界面。 singleInstance: 适用于需要高度隔离且单独存在界面,启动一个独立地图Activity。...这样,该Activity启动,它会创建一个任务栈,并成为该任务栈根Activity。再次启动该Activity,它会将之前创建任务栈移到前台,并执行onNewIntent()方法。...singleInstance: 将ActivityLaunchMode设置为singleInstance该Activity启动,它会创建一个任务栈,并成为该任务栈根Activity。...一个Activity启动,它会检查Activity栈中是否已经存在与它具有相同TaskAffinity任务栈。默认是当前应用包名。 如果存在:Activity 会被添加到该任务栈中。...例如,一个 Activity LaunchMode设置为singleTask,并且它TaskAffinity与另一个 Activity TaskAffinity相同时,那么该 Activity

16710
您找到你想要的搜索结果了吗?
是的
没有找到

Activity启动模式

Android程序中,应用程序通过活动栈来管理Activity,活动栈中有多少个Activity对象,我们在退出程序时候就要按多少下返回键(即要将活动栈中所有Activity出栈),但是这样的话难免会有活动栈中存在相同...**launchMode属性设置为standard,如果有进程要启动这个Activity,那么无论这个Activiy是否在活动栈栈顶,都会被再次启动一次,**那么怎么解决呢。...:**再返活动栈中,如果要启动Activity在活动栈栈顶,那么,将不会创建这个Activity实例,但是如果不在,那么就会创建一个Activity实例并将其处于活动栈栈顶。...最后是singleInstance属性,设置了singleInstance属性Activity会单独占用一个活动栈,即系统会单独创建一个活动栈去管理launchModesingleInstance属性...最后总结一下4种启动模式: standard:不管要启动Activity是否已经存在与活动栈,都会创建一个Activity对象处于活动栈栈顶。

58710

深入理解Activity启动模式之大结局

singleTop模式来启动一个Activity,与在清单文件指定android:launchMode="singleTop"效果相同。...A-B,B中以这种模式启动C,C再启动D,则任务栈只有ABD。...通常我们在Service启动Activity,由于Service中并没有Activity任务栈,所以必须使用该Flag来创建一个Task。...android:allowTaskReparenting 官网解释 启动 Activity 任务接下来转至前台,Activity 是否能从该任务转移至与其有亲和关系任务 —“true”表示它可以转移...正常情况下, Activity 启动,会与启动任务关联,并在其整个生命周期中一直留在该任务处。您可以利用该属性强制 Activity 在其当前任务不再显示将其父项更改为与其有亲和关系任务。

1.3K10

Android拾萃- Activity生命周期和启动模式

官方描述很形象,Activity 生命周期每个阶段就是金字塔上一阶。   系统创建 Activity 实例,每个回调方法会将 Activity 状态向顶端移动一阶。...换句话说,A应用需要启动MainActivity 是singleInstance模式,A启动后,系统会为它创建一个任务栈,然后A单独在这个任务栈中,如果此时B应用也要激活MainActivity...A-B,B中以这种模式启动C,C再启动D,则任务栈只有ABD。...在5.0之前,启动一个Activity,系统将首先检查ActivitylaunchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance...,而5.0之后这个方法做了修改,修改之后即便启动页面设置launchMode为singleTask或singleInstance,onActivityResult依旧可以正常工作,也就是说无论设置哪种启动方式

1.4K50

安卓应用安全指南 4.1.3 创建使用活动 高级话题

任务在活动被调用时创建 被调用活动是任务活动,它已经在前台或者后台存在 4.1.3.4 根活动活动是作为任务起点活动。 换句话说,这是创建任务启动活动。...例如,默认活动启动启动,此活动将是根活动。 根据 Android 规范,发送到根Activity意图内容可以从任意应用中读取。 因此,有必要采取对策,不要将敏感信息发送到根活动。...可以通过在AndroidManifest.xml中编写android:launchMode来设置Activity启动模式。 它没有编写,它被认为是“标准”。...singleInstance 与singleTask相同,但以下几点不同。 只有根活动可以属于新生成任务。 因此,通过此模式启动活动实例,始终是根活动。...这里问题是,任务活动实例以singleInstance启动以“标准”调用Activity Affinity 与任务相同时,新任务生成受到现有的singleInstance 活动限制。

1.4K20

我所理解Android 启动模式

正常情况下,一个Activity启动了另一个Activity时候,启动Activity就会置于任务栈顶端,并处于活动状态,而启动Activity虽然成功身退,但依然保留在任务栈中,处于停止状态...,当用户按下返回键或者调用finish()方法,系统会移除顶部Activity,让后面的Activity恢复活动状态。...FLAG_ACTIVITY_SINGLE_TOP 使用singletop模式启动一个Activity,与指定androidlaunchMode=“singleTop”效果相同。...FLAG_ACTIVITY_CLEAR_TOP 使用SingleTask模式来启动一个Activity,与指定androidlaunchMode=“singleTask”效果相同。...在5.0之前,启动一个Activity,系统将首先检查ActivitylaunchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance

79070

【建议收藏系列】:我打赌你一定没搞明白Activity启动模式!

正常情况下,一个Activity启动了另一个Activity时候,启动Activity就会置于任务栈顶端,并处于活动状态,而启动Activity虽然成功身退,但依然保留在任务栈中,处于停止状态...,当用户按下返回键或者调用finish()方法,系统会移除顶部Activity,让后面的Activity恢复活动状态。...FLAG_ACTIVITY_SINGLE_TOP 使用singletop模式启动一个Activity,与指定androidlaunchMode=“singleTop”效果相同。...FLAG_ACTIVITY_CLEAR_TOP 使用SingleTask模式来启动一个Activity,与指定androidlaunchMode=“singleTask”效果相同。...在5.0之前,启动一个Activity,系统将首先检查ActivitylaunchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance

2.1K00

Activity启动模式完全解读-更新中

可以在AndroidManifest.xml文件中通过给Activity标签指定android:launchMode属性来选择启动模式。...我们知道Android是使用返回栈来管理活动,在standard默认模式下,每当启动一个活动,它就会在返回栈中入栈,并处于栈顶位置。...Code演示 ---- singleTop 说明 活动启动模式指定为singleTop,在启动活动,如果发现返回栈栈顶已经是该活动,则认为可以直接使用它,不会创建活动实例。...Code演示 ---- singleTask 说明 活动启动模式为singleTask模式时候,每次启动活动系统首先会在返回栈中检查是否存在该活动实例,如果发现已经存在则直接使用该实例,并把这个活动之上所有的活动统统出栈...Code演示 ---- singleInstance 说明 指定为singleInstance模式活动会启用一个返回栈来管理这个活动 Code演示

29930

Activity 不只有跳转。功能篇(一)

SingleTop:在每次启动活动时候如果发现栈栈顶已经有该活动了,那么就直接使用它,不会再创建活动实例。...(只要是在A上实例全部出栈,ABCD,需要用到B,此时栈中AB,CD出栈) SingleInstance:对于设置该模式活动(Activity),会创建一个实例保存在返回栈中,这是因为可供其他程序调用这个活动...,达到了共享这个实例,在单个程序中:A->B(模式SingleInstance)->C,创建A实例,创建B实例(返回栈中),创建C实例,点击back键,会C弹出栈,显示A,再次点击back键,A...前提:ActivityA已经启动过,处于当前应用Activity任务栈中; ActivityALaunchMode为Standard: 由于每次启动ActivityA都是启动实例,和原来启动没关系...,所以不会调用原来ActivityAonNewIntent方法 ActivityALaunchMode为SingleTop: 如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用

1.1K20

Android-活动启动模式

中通过标签指定android:launchMode属性来选择启动模式。...singleTop 启动模式指定为singleTop,在启动活动时候,如果发现返回栈栈顶已经是该活动,则认为可以直接使用,不会创建实例。...修改AndroidManifest.xml标签中主活动启动模式: <activity android:name=".MainActivity" android:launchMode="singleTop...不过当MainActivity并未处在栈顶位置,那么在启动MainActivity,还是会创建实例。...singleInstance 不同于其他三种启动模式,指定为singleInstance模式活动会启用一个返回栈来管理这个活动, 假设程序中有一个活动是允许其他程序调用,如果我们想实现其他程序和我们程序共享这个活动实例

65320

Android singleTask和singleInstance一点思考

singleInstance任务栈中开启,并且该任务中有且仅有这一个Activity实例,若复用Activity实例,则通过onNewIntent进行激活。...设置不同android:taskAffinity,就可以创建任务栈了。下面也会通过具体实例来验证singleTask这些特点。...2)singleTask和android:taskAffinity巧妙配合使用 (1)开启任务栈 实例:默认启动Activity为MainActivity,MainActivity来启动launchMode...所以设置 android:taskAffinity时候,可以在任务栈中创建Activity实例 (2)singleTaskActivity去启动其他Activity,其他Activity会在singleTask...3)singleInstanceactivity在启动其他Activity,其他Activity可以新创建一个任务栈,也可以在已有的任务栈中。

1.6K40

android

onPause :一个正在前台运行活动因为其他活动需要前台运行而转入后台运行时候,触发该方法。这时候需要将活动状态持久化,比如正在编辑数据库记录等。...所以保存状态信息是应该在onPause做,而不是onStop做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给活动预留足够存储空间而随时结束这些活动。...一个Activity启动,当前活动Activity将会移到Activity栈顶部。...尽管如此,其它地方需要内存,它将是最有可能被释放资源一个Activity停止后,一个很重要步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。...是否允许其它activity存在于本task内 “singleInstance”独占一个task,其它activity不能存在那个task里; 如果它启动了一个activity,不管activity

53040

Android 面试黑洞——当我按下 Home 键再切回来,会发生什么?

很多 Android 工程师在投简历找工作之前,会去补习一下 Activity 启动模式(launchMode),因为面试时候经常会考。...在 singleTask 之外,Android 还提供了一种更彻底 launchMode 选项:singleInstance。 刚才我说,singleTask 其实是个事实上全局单例,是吧?...那么在实际操作中,它们区别就是:在被启动之后,用户按返回键,singleTask 会在自己 App 里进行回退,而 singleInstance 会直接回到原先 App;以及用户稍后从桌面点开...singleTask,Android 就会去检查 Activity 和当前 Task taskAffinity 是不是相同,如果相同就继续入栈,而如果不同, Activity 就会进入和它自己...taskAffinity 相同 Task,或者创建一个 Task。

1.6K30

android几种常见启动模式

launchMode在多个Activity跳转过程中扮演着重要角色,它可以决定是否生成Activity实例,是否重用已存在Activity实例,是否和其他Activity实例公用一个task里...配置android:launchMode属性为以上四种之一。...还是用刚才示例,只需将launchMode改为singleTop,就能看到区别。 运行时候会发现,按多少遍按钮,都是相同ActiA实例,因为该实例在栈顶,因此不会创建实例。...比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用入口Activity,就是intent-filter中配置为main和launch那个(见一个APK文件部署产生多个应用安装效果...比如导游应用启动地图Activity,实际上是在导游应用task栈之上singleInstance模式创建(如果还没有的话,如果有就是直接显示它)一个栈,这个栈里面的唯一Activity,地图Activity

81860

Android》Lesson09-Acitivity四种启动模式

- 长沙游哥 - 博客园 三、Acitivity四种启动模式 基础总结篇之二:Activity四种launchMode - Scott Liu - 博客频道 - CSDN.NET...Android开发四个LaunchMode_百度经验 四、standard 1,在AndroidManifest.xml中设置Activity启动模式 android:launchMode="...FirstActivity实例,并且放于栈结构顶部,当我们按下后退键,才能看到原来FirstActivity实例。...五、singleTop 当前栈结构中栈顶只有一个Activity实例 但是:从非栈顶回到栈顶会启动实例 六、singleTask 不管Acitivity是否位于栈顶,都是使用唯一实例,不会新建实例...七、singleInstance 单独在一个栈中,可以用户活动共享 八、活动回收了怎么办?

460100

Activity16问

系统会在配置变更保留 ViewModel,使其成为保存界面数据理想场所,让您无需再次查询这些数据。...在该Activity实例已经存在于Task和Back stack中(或者通俗说可以通过按返回键返回到该Activity ),使用intent来再次启动该Activity时候,如果此次启动不创建该...且在下面情况下系统不会创建该Activity实例: 1,如果该Activity在Manifest中android:launchMode定义为singleTask或者singleInstance....以下几种情况分析都遵循该原则: 1.当用户按下 HOME 键 2.长按 HOME 键,选择运行其他程序时 3.锁屏 4.从 activity A 中启动一个 activity ...一个在后台任务栈中 Activity A,有其他任务进入前台,并且 taskAffinity 与 A 相同,则会自动将 A 添加到当前启动任务栈中。

34410
领券