Activity启动模式 介绍 Android 启动模式之前,先介绍两个概念task和taskAffinity task:翻译过来就是“任务”,是一组相互有关联的 activity 集合,可以理解为...通过上面我们了解了Activity的几种启动模式,接下来我们看看 SingleTask和 Intent.FLAG_ACTIVITY_CLEAR_TOP的区别: singleTask:栈内复用模式。...Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_SINGLE_TOP 我们把ThirdActivity中的代码修改一下: Intent intent...Intent.FLAG_ACTIVITY_SINGLE_TOP时调用了onNewIntent方法,复用了MainActivity,说明他们可以实现和singleTask一样的效果 总结 singleTask...singleTask是写死在Manifest文件中的,如果觉得太笨重,可以同时使用Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_SINGLE_TOP
添加intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 效果:C会被清除出栈;然后B被finish掉,重新启动;D被销毁。...重走生命周期,不会走onNewIntent()方法 Intent intent = new Intent(this, TestBActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP...); startActivity(intent); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP...| Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); 参考:Android 启动模式FLAG_ACTIVITY_CLEAR_TOP 重新启动...: Intent intent = new Intent(context, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
android开发中如何结束所有的activity 一、每一个activity都有自己的生命周期,被打开了最终就要被关闭。...四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android.os.Process.killProcess...(android.os.Process.myPid()); //关闭当前界面方法三 System.exit(0); //关闭当前界面方法四 this.onDestroy();...Intent intent = new Intent(); intent.setClass(DActivity.this,BActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP...);//设置不要刷新将要跳到的界面 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity startActivity
横竖屏切换时Activity生命周期 注意:还有一点,非常重要,一个 Android 的变更细节!...2,如果该Activity在Manifest中的android:launchMode定义为singleTop且该实例位于Back stack的栈顶. 3,如果该Activity在Manifest中的android...:launchMode定义为singleTop,且上述intent包含Intent.FLAG_ACTIVITY_CLEAR_TOP标志. 4,如果上述intent中包含 Intent.FLAG_ACTIVITY_CLEAR_TOP...标志和且包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志. 5,如果上述intent中包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志且该实例位于Back...分别创建 2 个 Android 工程:First 和 TaskAffinityReparent: 2.在 First 中有 3 个 Activity:FirstA、FirstB、FirstC。
Intent.FLAG_ACTIVITY_CLEAR_TOP| FLAG_ACTIVITY_NEW_TASK|singleTop|top.jpg Intent.FLAG_ACTIVITY_SINGLE_TOP...Intent.FLAG_ACTIVITY_SINGLE_TOP多用来做辅助作用,跟launchmode中的singleTop作用一样,在Task栈顶有的话,就不新建,栈顶没有的话,就新建,这里的Task...--如果taskTop的Task rootActivity是目标Activity,则额外,如果是Intent.FLAG_ACTIVITY_SINGLE_TOP,并自己位于栈顶 不新建-->...总结 以上分析只是针对一个版本的Android,并且只涉及部分Flag,要完全理解各种组合就更麻烦了,所以所,如果面试官问题Activity启动模式的话,随便侃侃还可以,但是要以此来鄙视你,那你有90%...让你装逼 作者:看书的小蜗牛 原文链接: Android面试官装逼失败之:Activity的启动模式 仅供参考,欢迎指正
,这种方式和Java有点像 startActivity( Pair("id",456), Pair("name","晨曦")...拿到包裹的数据,通过getInt和getString拿到相对应键的值 val id = intent.extras?....所以Android允许在代码中手动设置启动表示,这样在不同时候调用startActivity方法就能运行特定的启动模式。...该值等同于launchMode=“singleTop” Intent.FLAG_ACTIVITY_CLEAR_TOP 当栈顶存在待跳转的Activity实例时,重新创建一个新实例,并将原实例上方的所有实例加以清楚...);//置于栈顶 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//清空栈顶 intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
:name="" android:launchMode="standard"/> 总结 : 默认模式下 , Activity 是可以实例化多次的 , 返回堆栈内可以相邻存放相同的 Activity...(FirstActivity.this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity...Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 要注意区分 栈内复用模式 ( singleTask 启动模式 ) 与 Intent 标志位 : Intent.FLAG_ACTIVITY_CLEAR_TOP...:name="" android:launchMode="singleInstance"/> 这个模式一般也不常用 ; V ....Intent intent = new Intent(); intent.setClass(FirstActivity.this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
Activity单任务栈 方法2:采用Activity启动标记位 原理:对入口Activity采用 2 标记位: Intent.FLAG_ACTIVITY_CLEAR_TOP:销毁目标Activity...和它之上的所有Activity,重新创建目标Activity Intent.FLAG_ACTIVITY_SINGLE_TOP:若启动的Activity位于任务栈栈顶,那么此Activity的实例就不会重建...// 步骤1:该标记位作用:销毁目标Activity和它之上的所有Activity,重新创建目标Activity intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP...实现复杂:RxBus 本身的实现难度 & 需要在每个Activity注册和取消订阅 RxBus 使用 应用场景 1....() = Java中结束进程的方法:关闭当前JVM虚拟机 System.exit(0); // System.exit(0)和System.exit(1)的区别 // 1.
(即采用SingleInstance启动模式)则无法处理 应用场景 Activity单任务栈 ---- 方法2:采用Activity启动标记位 原理:对入口Activity采用 2 标记位: Intent.FLAG_ACTIVITY_CLEAR_TOP...:销毁目标Activity和它之上的所有Activity,重新创建目标Activity Intent.FLAG_ACTIVITY_SINGLE_TOP:若启动的Activity位于任务栈栈顶,那么此Activity...版本要求较高:Android 5.0以上 应用场景 Android 5.0以上的 Activity单任务栈 ---- b....exit"); System.exit(0); 优点 可与 RxJava & RxBus 相结合 缺点 实现复杂:RxBus 本身的实现难度 & 需要在每个Activity注册和取消订阅...() = Java中结束进程的方法:关闭当前JVM虚拟机 System.exit(0); // System.exit(0)和System.exit(1)的区别 // 1.
若出现多任务栈(即采用SingleInstance启动模式)则无法处理 应用场景 Activity单任务栈 方法2:采用Activity启动标记位 原理:对入口Activity采用 2 标记位: Intent.FLAG_ACTIVITY_CLEAR_TOP...:销毁目标Activity和它之上的所有Activity,重新创建目标Activity Intent.FLAG_ACTIVITY_SINGLE_TOP:若启动的Activity位于任务栈栈顶,那么此Activity...版本要求较高:Android 5.0以上 应用场景 Android 5.0以上的 Activity单任务栈 b....exit"); System.exit(0); 优点 可与 RxJava & RxBus 相结合 缺点 实现复杂:RxBus 本身的实现难度 & 需要在每个Activity注册和取消订阅...() = Java中结束进程的方法:关闭当前JVM虚拟机 System.exit(0); // System.exit(0)和System.exit(1)的区别 // 1.
Intent.FLAG_ACTIVITY_CLEAR_TOP 如果没有使用FLAG_ACTIVITY_NEW_TASK,目标是当前Task栈,根据不同的组合会产生不同的效果,如果单独使用Intent.FLAG_ACTIVITY_CLEAR_TOP...,并且没有设置特殊的launchmode,那么,Google官方的示例是:如果ABCD Task中的D采用Intent.FLAG_ACTIVITY_CLEAR_TOP唤起B,这个时候首先会将CD出栈,但是至于...Intent.FLAG_ACTIVITY_SINGLE_TOP多用来做辅助作用,跟launchmode中的singleTop作用一样,在Task栈顶有的话,就不新建,栈顶没有的话,就新建,这里的Task...--如果taskTop的Task rootActivity是目标Activity,则额外,如果是Intent.FLAG_ACTIVITY_SINGLE_TOP,并自己位于栈顶 不新建-->...总结 以上分析只是针对一个版本的Android,并且只涉及部分Flag,要完全理解各种组合就更麻烦了,所以所,如果面试官问题Activity启动模式的话,随便侃侃还可以,但是要以此来鄙视你,那你有90%
Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT 1. 如果已经启动了四个Activity:A,B,C和D。...startActivity(intent)里的intent里添加flags标记,如下所示: Intent intent = new Intent(this, B.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP...如果不想重新再创建一个新的B Activity,则在上面的代码里再加上: intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 这样B Activity...如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个Actvity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码: Intent intent
起因 在测试Activity的启动过程中,测试Intent.FLAG_ACTIVITY_CLEAR_TOP以及SingleTask的过程中发现这两者有一些区别。...第一种:在Intent中加入Intent.FLAG_ACTIVITY_CLEAR_TOP 测试结果 在加入了Intent.FLAG_ACTIVITY_CLEAR_TOP的标识位之后: 仍然会先清理指定...if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE && (launchFlags & Intent.FLAG_ACTIVITY_SINGLE_TOP
,马上请教了google大神,发现了毛病 问题 ·Android O上发不出来通知了 ·设置通知的震动、声音、呼吸灯都不起作用 问题一 从源码入手 查看 NotificationManagerService.java...设备支持的话) channel.enableLights(true); channel.setLightColor(Color.RED); // 设置通知出现时的震动(如果 android...NotifyEntity entity) { Intent intent = new Intent(context, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP...| Intent.FLAG_ACTIVITY_SINGLE_TOP); Log.i(TAG, "entity.getExtra() = " + entity.getExtra());...,欢迎大家点评和指导,如果有错麻烦指出 参考: https://www.jianshu.com/p/99bc32cd8ad6 https://blog.csdn.net/weixin_33698043
补充:finish()和system(0)都只能退出单个activity。...我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP...finish(); } } ———————————— A的Manifest.xml配置成android...因为A是android:launchMode=”singleTop” 不会调用oncreate(),而是响应onNewIntent()这时候判断Intent.FLAG_ACTIVITY_CLEAR_TOP...补充: 1.可以把A设置成不可见的Acitivity: AndroidManifest.xml中设置: android:theme=”@android:style/Theme.NoDisplay
在android4.0以上必须同时指定这两个属性,如果只写orientation不生效。...Activity的启动模式 Android应用程序都是由一个或多个Activity组成的,而Android内部则是通过栈来对Activity进行管理的。所谓栈就是一个先进后出的数据结构。...比如说应用程序A想调用singleInstance模式下的ActivityA,而应用程序B也同样调用了,那么在应用程序A和B中就会各有一个ActivityA的实例。..." android:launchMode="singleTask"/> 启动Activity时。...Intent.FLAG_ACTIVITY_SINGLE_TOP 与在manifest文件里的launchmode指定"singleTop"作用一样 Intent.FLAG_ACTIVITY_CLEAR_TOP
(PS:本篇文章的实验数据都基于Android7.0) Activity启动模式之Flags 先来看看常用Flags: Intent.FLAG_ACTIVITY_SINGLE_TOP 该标志位表示使用...Intent.FLAG_ACTIVITY_CLEAR_TOP 该标志位表示使用singleTask模式来启动一个Activity,与在清单文件指定android:launchMode="singleTask...在解释这句时我先想和大家先聊聊Android手机在使用过程中为了手机软件运行的更加流畅,我们一般都会清理后台任务。这个任务列表是我们最能直观的看到任务的存在痕迹。...因为我感觉android:allowTaskReparenting和taskAffinity没啥关系,至与launchMode有关!!!...上面文字叙述总结为一句话:android:allowTaskReparenting可以让Activity在TASK中转移,但该Activity时能是“standard”和“singleTop”模式。
Android面试题(四大组件篇) window、进程、线程篇 Android面试题(数据存储、view篇) Activity Q:说下Activity的生命周期?...”singleTask”效果相同 Intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); //指定singleTop模式,与在AndroidManifest.xml...中指定android:launchMode”singleTop”效果相同 Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //具有这个标志的Activity...ActivityManagerService(以后简称AMS)Android中最核心的服务 , 主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似...ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
" android:authorities="com.tmgp.sgame.conan.myapplication.fileprovider" android...:grantUriPermissions="true" android:exported="false" > android:name="android.support.FILE_PROVIDER_PATHS" android:resource=..."); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); } if (getPackageManager...intent.setDataAndType(Uri.fromFile(file), "application/*"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
import android.app.Activity; import android.app.ActivityManager; import android.content.Context; import...java.util.Stack; /** * 应用程序Activity管理类:用于Activity管理和应用程序退出 * * */ public class AppManager {...2.在跳转到最后一个Activity时,给Intent添加一个Flag,intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),这个标签的意思是将之前的栈都清除了...其实作用和1一样,只不过更简洁一点。...Intent intent = new Intent(); intent.setClass(Android123.this, CWJ.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
领取专属 10元无门槛券
手把手带您无忧上云