activity启动模式

Android中Activity启动模式详解

风流意气都作罢 提交于 2019-11-28 14:02:50
 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。   Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name= " .MainActivity " android:launchMode= " standard " /> Activity的四种启动模式: 1 . standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 2 . singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。 3 . singleTask 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 4 . singleInstance 在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中

Activity的四种加载方式

我怕爱的太早我们不能终老 提交于 2019-11-28 12:07:45
配置activity时可指定android:launchMode属性,该属性用于配置改Activity的启动模式。该属性支持以下4个属性值。 standard:标准模式,默认的加载模式 singleTop:Task栈顶单例模式 singleTask:Task内单例模式 singleInstance:全局单例模式 Android采用Task来管理多个Activity,当我们启动一个应用时,Android会为之创建一个Task,然后启动这个应用的入口Activity(即intent-filter中配置MAIN和LAUNCHER的Activity)。 1、standard模式 每次通过这种模式启动Activity时,Android总会为目标创建一个新的实例,并将该Activity添加到当前Task栈中,这汇总模式不会启动新的Task,新的Activity将会被添加到原因有的Task中。 2、 singleTop模式 这中模式和standard有点相似,但有一点不同:当将要启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activy实例。 如果要将启动的目标Activy没有位于栈顶,此时系统会重新创建目标Activity实例,并将它加载到Task栈顶,此时与standard模式完全相同。 3、 singleTask模式

Activity intent经常使用的 FLAG 集合

有些话、适合烂在心里 提交于 2019-11-28 12:07:36
首先简单说下Task和Activity的关系。 Task就像一个容器,而Activity就相当与填充这个容器的东西,第一个东西(Activity)则会处于最下面,最后添加的东西(Activity)则会在最上面。从Task中取出东西(Activity)是从最顶端取出,也就是说最先取出的是最后添加的东西(Activity),以此类推,最后取出的是第一次添加的Activity,而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建activity的创建方式; Intent.FLAG_ACTIVITY_NEW_TASK 默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说Task1中有A,B,C三个Activity,此时在C中启动D的话,如果在Manifest.xml文件中给D添加了Affinity的值和Task中的不一样的话,则会在新标记的Affinity所存在的Task中压入这个Activity。如果是默认的或者指定的Affinity和Task一样的话,就和标准模式一样了启动一个新的Activity. FLAG_ACTIVITY_SINGLE_TOP 这个FLAG就相当于加载模式中的singletop,比如说原来栈中情况是A,B,C,D在D中启动D,栈中的情况还是A,B,C,D FLAG_ACTIVITY

Activity的启动模式与flag详解

冷暖自知 提交于 2019-11-28 12:07:25
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法,即使某个Activity在 Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。 singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了

针对Activity的启动模式理解1---standard模式

早过忘川 提交于 2019-11-27 07:45:54
Activity有4种启动模式: standard、singleTop、singleTask、singleInstance; Activity的四种启动模式 涉及到了Task任务: 在Android中一些列相关的操作所启动的Activity构成了一个完整的任务;一般情况下,在左面或者launcher中单击图标启动Activity时会创建一个新的任务; 那么如何切换任务呢? 单击Home键,可将当前的任务切换到后台,长按Home键的时候可以查看或者选择最近的任务; Android为每一个任务(Task)维护一个Activity栈 ------------------------------------------------- 第一种启动模式:standard模式 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tView = new TextView(this); Log.d("AndroidCexinsouleActivity", this + "------>" + this.getTaskId()); Button btnButton = new Button(this); btnButton.setText("Standard"); btnButton

Activity跳转Flag详解

自古美人都是妖i 提交于 2019-11-27 07:45:03
Android 的一个特色就是 application A 的 activity 可以启动 application B 的 activity,尽管 A 和 B 是毫无干系的,而在用户看来,两个场景紧密联系,视觉上二者构成了一个整体。Android 就是把这种误觉定义为 Task,它既不是 class,也不是 AndroidMainifest.xml 中的一个元素。从表现上看 Task 就像是一个 stack,一个一个的 activity 是构成 stack 的元素,做着入栈 (push) 和出栈 (pop-up)这样简单重复性的劳动。 默认的规则总是满足大多数的应用场景,但是也总会有一些例外打破习以为常的惯例。Task 的默认规则同样并非牢不可破,修改的方法还是有的。借助 Intent 中的 flag 和 AndroidMainifest.xml 中 activity 元素的属性,就可以控制到 Task 里 Activity 的关联关系和行为。 在 android.content.Intent 中一共定义了20种不同的 flag,其中和 Task 紧密关联的有四种: 1.FLAG_ACTIVITY_NEW_TASK 2.FLAG_ACTIVITY_CLEAR_TOP 3.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 4.FLAG_ACTIVITY

Activity的生命周期和启动模式

岁酱吖の 提交于 2019-11-27 02:39:54
activity的生命周期 正常情况下activity的生命周期 如下图所示: 整个生命周期,onCreate 和onDestroy,onStart和onStop,onResume和onPause都是一一配对的。 问题 当前Activity为A,用户打开新的ActivityB,B的onResume和A的onPause方法那个先执行? 当启动一个新的activity是,旧的activity的onPause会先执行,然后启动新的activity。具体执行流程:A.onPause——B.oncCreate——B.onStart——B.onResume——A.onStop。 异常情况下activity生命周期 activity除了随着用户操作调用生命周期的方法外,还会有异常情况。比如系统配置发生变化和系统内存不足时的异常情况。 1.系统配置发生变化导致activity被杀死和创建 当系统配置发生变化后,activity可能会被销毁,系统会调用 onSaveInstanceState 保存当前activity的状态, onSaveInstanceState 一定发生在onStop方法之前,和onPause方法没有关系,可能在前可能在后发生。当activity重新创建的时候,系统会调用 onRestoreInstanceState 或 onCreate 方法获取保存的数据然后可以恢复

Android LaunchMode与任务栈总结

半腔热情 提交于 2019-11-26 19:58:16
网上关于launch mode的资料有很多,尽可参考. 本文旨在进行稍微深入一点的说明. 简单总结:四中Activity加载方式 standard 默认加载方式.每当需要一个Activity instance的时候系统都会创建一个新的实例给我们,并且将它置于栈顶.这种方式不关心原有的栈结构. singleTop 系统首先会寻找栈中的instance,如果已有所需实例且位于栈顶,则直接使用;否则就重新创建新的实例. singleTask 系统首先会寻找栈中的instance,若栈中已有所需实例,则移出该实例之上的所有实例并使用. singleInstance 当Activity的launch mode 被设置为single instance时,该Activity 实例将被创建于一个新的栈中,且该栈只存在一个实例.如有需要则直接从该栈中取来使用. Activity栈结构 那么,上文中所谓的"栈"具体指的什么呢? 一个栈,代表了一个"任务"(task),这个栈中可能存放有来自不同应用程序的多个Activity,在用户的角度来说,就像是多个页面连贯展示一样. 我们使用Intent启动一个新的Activity时,可以通过intent携带的参数设置任务与加载模式,比如设置intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK

关于2019的一些面试实战小结

天大地大妈咪最大 提交于 2019-11-26 01:51:19
今日头条屏幕适配的原理? 1:首先计算出 density,计算公式:当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = densitydensity 的意思就是 1 dp 占当前设备多少像素计算density 的原因:在布局文件中填写的是什么单位,最后都会被转化为 px,系统就是通过上面的方法,将你在项目中任何地方填写的单位都转换为 px 但是,今日头条适配方案默认项目中只能以高或宽中的一个作为基准,来进行适配 简述Android中的加固和使用平台? 加固:防止代码反编译,提高代码安全性 加固三方平台,梆梆安全,360加固,爱加密等 区别:梆梆安全,360加固看不到项目中的类,爱加密看的到Java类,单看不到里面的方法实现体,效果比前面差一点点 加固的底层原理:第三方加固的应用会生成一个Apk,然后把你的APK读取出来,在封装到这个第三方应用的APK里面. 如何对APK瘦身? 1)使用混淆, 2)开启shrinkResourse(shrink-收缩),会将没有用到的图片变成一个像素点 3)删除无用的语言资源(删除国际化文件) 4)对于非透明的大图,使用JPG(没有透明度信息),代替PNG格式 5)使用tinypng进行图片压缩 6)使用webp图片格式,进一步压缩图片资源 7)使用第三方包时把用到的代码加到项目中来,避免引用整一个第三方库