总共有四篇关于Activity,task,launchMode的文章,可以在我的博客中查看,或者在文章底部点下一篇。 1.Standard 默认模式,多次实例化,按序入栈出栈。...task,将这个Activity以上的Activity弹出,并且触发这个Activity的onNewIntent事件; (2)描述了不会新建task的情况,但是: 实验发现(2)的前提条件,有一点问题:...(1)“包含这个Activity的实例”不是必要条件: 如果没有一个task包含这个Activity的实例,但是,存在一个task包含与这个Activity属于同一个App的其他Activity的实例...(3)在包含这个Activity的task中,仅包含这个一个Activity,如果需要打开新的Activity,必须在其他task中打开,如果新建了task,task的根activity为新打开的这个Activity...总共有四篇关于Activity,task,launchMode的文章,可以在我的博客中查看,或者直接点下一篇。
该模式的特点就是启动一个activity就会在栈中按先进后出的木桶原则创建一个activity。...这就是stanard模式每次启动都创建新的Activity. 1.2activity启动模式之singleTop 还是刚才的代码,我们启动模式改为 android:launchMode="singleTop...1.3 activity启动模式之singleTask 好了,我们现在将启动模式改为这个android:launchMode="singleTask",从welcomeActivity点击按钮跳转到MainActivity...这就是SingleTask启动模式的特点,如果Activity已经被创建,那么如果你再次跳转到此Activity,将不会创建新的Activity反而会把此Activity之后加入栈的Activity全部移除...我们可以利用这个启动模式的特点进行Activity栈中的移除工作。
能不能进行Activity的复用呢?Android系统在设计就考虑到这个问题,所以提供了同步的Activity启动模式,在不同条件下进行Activity的复用。...Task是指在执行特定作业时与用户交互的一系列 Activity。Task以栈的形式管理Activity集合。...> <activity android:name=".BActivity" android:launchMode="singleTask"/> <activity android:name=".BActivity" android:launchMode="singleInstance"/> <activity...之前看过其他类似文章或者书籍的同学都知道还有Activity的Flags和 android:taskAffinity 标签对Activity的启动有影响。
的launchMode.一共有四种. 1.standard. 2.singleTop. 3.singleTask. 4.singleInstance. ...所以带singleTop这种启动模式的Activity,只有这个Activity在栈顶的时候,在启动这个Activity才不会重新创建新的Activity.否则就和standard没什么区别。...并且当A不在栈顶的时候,再启动A的话,会直接销毁 栈中位于 A 上面的所有Activity实例。我们再新增launchMode为standard的B和C。...这种模式就是singleTask的加强模式。除了singleTask的所有特性之外。还规定了这种模式的Activity只能单独的位于一个任务栈中。 ...大家看完要是不明白可以看看这个,这里有篇文章http://blog.csdn.net/liuhe688/article/details/6754323,比较详细的介绍了Activity的launchMode
作为一个好的开发人员,不应该忽视掉Activity的启动方式launchMode。每次新建Activity时,内心都要问问自己这个界面启动场景是什么,它应该适应于哪种启动方式?...standard 如果不对新建的Activity不做任何修改,它在清单文件中默认的launchMode为standard 1<activity 2 android:name=".MainActivity...大家都知道我们启动的Activity的保存在stack中,假设当前Activity堆栈为 D C B A 此时我为B添加launchMode="standard",并且在D中启动B,此时Activity...singleTop 1.还是之前的Activity堆栈 D C B A 现在我对C添加launchMode="singleTop",并在D中启动C,此时的Activity堆栈为 C (新的实例C) D...C添加launchMode="singleTask",并在D中启动C,此时Activity堆栈为 C (之前的实例C,新的intent数据可以通过onNewIntent获取) B A D会被从Activity
启动模式的概念 launchMode是Android中用来控制Activity栈行为的启动模式。...Activity做不同的处理,显然launchMode无法满足这个要求。...该值等同于launchMode="standard" FLAG_ACTIVITY_SINGLE_TOP : 当栈顶为待跳转的activity实例时,则重用栈顶的实例。...该值等同于launchMode="singleTop" FLAG_ACTIVITY_CLEAR_TOP : 当栈中存在待跳转的activity实例时,则重新创建一个新实例,并将原实例上方的所有实例加以清除...和FLAG_ACTIVITY_CLEAR_TASK,说明如下: FLAG_ACTIVITY_NO_HISTORY 该标志与launchMode="standard"情况类似,但栈中不保存新启动的activity
大家好,又见面了,我是你们的朋友全栈君。...测试应用主activityA使用默认启动模式 ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) Display #0 (activities...: 打开activityB,添加flag—-FLAG_ACTIVITY_NEW_TASK ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities...{a0bc5f0 u0 com.wp.launchmode/.ActivityA t27} Stack #0: 打开activityC ACTIVITY MANAGER ACTIVITIES...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
但是最近在写Demo测试这几种启动模式的特点与区别的时候,发现与官方文档有不一致的地方。本篇文章主要讲解的是SingleTask这种LaunchMode。...但是在写demo测试的时候,发现这个说法是不准确的。这句话成立的条件是,要启动的Activity的affinity是唯一的,即当前所有的任务中没有与该affinity相同的任务。...Demo中包含两个Activity,Activity的LaunchMode: MainActivity-Standard SecondActivity- SingleTask 步骤: 启动MainActivity...如果设置了“singleTask”启动模式的Activity不是在新的任务中启动的,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,会调用该实例的onNewIntent,并且会把位于这个...Activity实例上面的Activit全部结束掉,最终这个Activity实例会位于任务的堆栈顶端。
引言 Android LaunchMode是一个重要的概念,它定义了Activity的启动模式,决定了Activity在不同情况下如何启动。在面试中,LaunchMode相关的知识点经常被问到。...参考简答: LaunchMode概述:Android中的LaunchMode用于定义Activity的启动模式,通过在Manifest文件中配置,可以影响Activity的实例化和调用栈的管理。...LaunchMode运用 问题: 如何使用LaunchMode来实现单实例 Activity? 出发点: 面试官希望了解你对LaunchMode的实际运用能力。...singleInstance: 将Activity的LaunchMode设置为singleInstance,当该Activity启动时,它会创建一个新的任务栈,并成为该任务栈的根Activity。...参考简答: LaunchMode是一个 Activity 属性,它可以用来指定 Activity 的启动模式。
首先,我们的Activity对象在我们在Android工程的AndroidManifest.xml配置文件中注册,之后才可以被我们的程序使用,而在我们注册Activity时,有一个launchMode属性是可以赋值的...启动模式launchMode属性的值为standard。...实际上,这正是launchMode属性中的standard值的作用,Activity默认的launchMode属性的值为standard。...** 我们还是用实验来看一下: 将MainActivity的launchMode改为singleTask,将SecondActivity的launchMode改为standard,重写MainActivty...最后是singleInstance属性,设置了singleInstance属性的Activity会单独占用一个活动栈,即系统会单独创建一个活动栈去管理launchMode为singleInstance属性的
分析 将打包的apk解析出AndroidManifest.xml发现,UnityPlayerActivity在AndroidManifest.xml中的launchMode是singleTask,发现问题了...天真的想法一: 一开始天真的我发现,修改一下项目的AndroidManifest.xml中的UnityPlayerActivity的launchMode就ok了。...的launchMode还是singleTask,没有变化。...后面,发现unityplayerActivity的launchMode是没有办法通过项目的修改 天真的想法二: 接上面的情况,我想应该是unity在打包默认模板配置死了,所以直接到unity的安装目录下去查找...> 代码中发现了个问题,于是我尝试了,把UnityPlayerActivity切换成其他的activity是不会打包成singleTask的launchMode,所以,其实unity的打包是只针对UnityPlayerActivity
android:launchMode="singleTop"/> <activity android:name=".D$8" android:launchMode="
同样,在启动插件Activity时,我们的思路也类似。通过仿照Activity的启动过程,我们自行创建Activity,“偷梁换柱”,交给系统去启动。... 这就是常说的,占坑。
查看源代码中的注释: /** * Check to see whether this activity is in the process of finishing, * either because...() 调用研究 刚刚一个BUG让我发现,如果 activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener...接口,然后 findViewById().setOnClickListenr(this) 如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,回到桌面...有的 你可以在 onPause() 方法里面判断 isFinishing() ,正常调用 finish() 后 activity 的回调过程是 onPause、onStop、onDestroy ,倘若出现上面的情况...以上这篇Activity isFinishing()判断Activity的状态实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
实验过程 在FourthActivity启动SecondActivity中测试Intent的Flag以及LaunchMode的影响结果。...Activity(即SecondActivity)之上的Activity 但是原来存在的Activity会先被清理掉,接着会创建一个新的Activity对象来替代 测试日志 E/MainActivity...第二种:LaunchMode设置为SingleTask 测试结果 在Manifest.xml中设置LaunchMode后: 同样会清理指定Activity(即SecondActivity)之上的Activity...so a new fresh one can be started. // 接着判断当前Activity的LaunchMode如果是LAUNCH_MULTIPLE,也就是默认的...LaunchMode, // 并且没有FLAG_ACTIVITY_SINGLE_TOP的话,就开始调用finishActivityLocked来结束该Activity
<activity android:name=".SingleTaskActivity" android:label="singleTask launchMode" android:launchMode...()方法中可以接收到上个页面的回传值,但你有可能遇到过拿不到返回值的情况,那有可能是因为Activity的LaunchMode设置为了singleTask。...两个Activity,A和B,现在由A页面跳转到B页面,看一下LaunchMode与StartActivityForResult之间的关系: ? before5.0.png ?...在5.0之前,当启动一个Activity时,系统将首先检查Activity的launchMode,如果为A页面设置为SingleInstance或者B页面设置为singleTask或者singleInstance...总结 实际开发过程中如果采用比较合理的Activity启动模式来做好任务栈的管理,可以事半功倍。在launchMode的选择上首先要搞清楚当前的Activity的作用,以及实际使用场景来做出合理选择。
简单基本launchmode 本文假定大家对于Activity的Task栈已经有初步了解,首先,看一下Activity常见的四种启动模式及大众理解,这也是面试时最长问的: standard:标准启动模式...Task栈,根据不同的组合会产生不同的效果,如果单独使用Intent.FLAG_ACTIVITY_CLEAR_TOP,并且没有设置特殊的launchmode,那么,Google官方的示例是:如果ABCD...Intent.FLAG_ACTIVITY_SINGLE_TOP多用来做辅助作用,跟launchmode中的singleTop作用一样,在Task栈顶有的话,就不新建,栈顶没有的话,就新建,这里的Task...--关键点2:预处理一些特殊的 launchmode,主要是设置Intent.FLAG_ACTIVITY_NEW_TASK--> // 如果sourceRecord ==null 说明不是从activity...--关键点5找到目标Task栈的栈顶元素 ,但是taskTop不一定是目标Activity--> ActivityRecord taskTop = r.launchMode
FLAG_与LaunchMode相比最大的不同是临时性 1.FLAG_ACTIVITY_NEW_TASK: Developer.android.com的说法: (1)在新的task中启动这个Activity...2.FLAG_ACTIVITY_SINGLE_TOP 打开的Activity如果在栈顶,则不创建新的实例,并且会触发onNewIntent事件。...与启动launchMode为SINGLE_TOP的Activity一致。...默认行为应该是清除包括这个Activity及其以上Activity的所有Activity,但如果为要启动的Activity设置了特殊的launchMode,则launchMode会影响这个Activity...如果这个Activity被设置为SingleTask或者打开这个Activity的时候,还添加了CLEAR_TOP的标签,则会将这个Activity上面的Activity出栈。
LaunchMode 有四种,分别为 Standard,SingleTop,SingleTask 和 SingleInstance,每种模式的实现原理一楼都做了较详细说明,下面说一下具体使用场景: Standard...: Standard 模式是系统默认的启动模式,一般我们 app 中大部分页面都是由该模式的页面构成的,比较常见的场景是:社交应用中,点击查看用户A信息->查看用户A粉丝->在粉丝中挑选查看用户B信息...->查看用户B粉丝… 这种情况下一般我们需要保留用户操作 Activity 栈的页面所有执行顺序。...A的视频页面,这样就不会过多干扰到用户先前的操作了。...这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到。
AndroidMainifest的launchMode Intent Flag(优先级更高) 2.1AndroidMainifest启动模式 在AndroidMainifest.xml文件里面的activity...<activity android:name=".FirstActivity" android:launchMode="singleTop" android:label="This...android:label="@string/app_name" android:launchMode="singleTask"/> <activity andorid:name="com.test.ThirdActivity...); 重要的Flag: FLAG_ACTIVITY_NEW_TASK,启动的Activity在新的Task中,相当于android:launchMode="newTask" FLAG_ACTIVITY_SINGLE_TOP...,相当于android:launchMode="singleTop" FLAG_ACTIVITY_CLEAR_TOP,相当于android:launchMode="singleTask" FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
领取专属 10元无门槛券
手把手带您无忧上云