首页
学习
活动
专区
工具
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(任何界面都可以去调用它访问网页)

57810

Activity的启动模式

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

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

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

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

    39310

    深入理解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.4K10

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

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

    1.6K50

    我所理解的Android 启动模式

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

    83370

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

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

    1.4K20

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

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

    2.3K00

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

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

    32130

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

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

    1.2K20

    Android-活动的启动模式

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

    68820

    Android 的singleTask和singleInstance的一点思考

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

    5.7K40

    android 栈

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

    58140

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

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

    1.8K30

    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

    87060

    《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 单独在一个栈中,可以用户活动的共享 八、活动回收了怎么办?

    491100

    启动模式?

    启动模式 声明启动模式有两种方式: 在清单文件中声明待启动的 Activity 的 launchMode 属性 代码中通过 Intent 启动 Activity 时,设置 flag 如果在一次启动过程中...singleInstance:单实例模式 全局单实例,首次启动时会创建新的 Activity 实例,并放入一个新的任务栈中,且 这个任务栈中只会有这一个实例。 后续启动不会再新建实例。...未显式声明 taskAffinity 的 Activity 都具有默认的任务栈,该任务栈的名称是应用包名。 当启动模式设置为 standard 或 singleTop 时,它是不起作用的。...当启动模式设置了 singleTask 或者 singleInstance 时,它就会新建任务栈来存储待启动的 Activity 实例。...} } } 从上面的注释 3 处可以看到,当启动模式是 singleInstance 或者 singleTask 时,系统会自动添加FLAG_ACTIVITY_NEW_TASK

    1.1K20
    领券