Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题。直到后来随着不断的深入,才发现原来Activity的加载还分为四种不同加载模式。灵活的使用合适的加载模式,可以避免产生大量的重复的Activity,从而优化性能,减少系统资源消耗。
四种加载模式具体为:
standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。
singleTop: 检查是否已经存在了一个实例位于Activity Stack的顶部,如果存在就不产生新的实例,反之则调用Activity的newInstance()方法产生一个新实例。
singleTask: 在一个新的Task中产生这个实例,以后每次调用都会使用此实例,而避免产生新的实例。
singleInstance: 这个基本上跟singleTask一样,只是有一点不同,那就是在这个模式下的Activity实例所处的Task中,只能有这一个Activity实例,而不能有其他的实例。
这些启动模式可以Android清单文件AndroidManifest.xml中,通过<activity>中的launchMode属性进行设置,如:
AndroidManifest.xml
<activity android:name="MainActivity" android:launchMode="singleTop">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Java Code
Intent intent = new Intent(SrcActivity.this, TargetActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
四种加载模式的区别如下:
1.所属Task的区别:
一般情况下,,“standard”和”singleTop”两种加载模式源Activity(即new Intent(arg0,arg1)中的第一个参数)和目标Activity(即new Intent(arg0,arg1)中的第二个参数)在同一个Task内,除非Intent包括了参数FLAG_ACTIVITY_NEW_TASK,如包含了此参数,目标Activity会起动到新的Task里;
“singleTask”和“singleInstance” 总是把目标Activity作为一个Task的根元素,他们不会被启动到一个其他Task里。
2.是否允许多个实例的区别:
standard”和”singleTop”可以允许有多个实例,并且可以位于不同的Task中;
singleTop要求如果Activity Stack顶部已经有目标Activity实例,则直接讲Intent发送给该实例,而不创建新实例。如Activity Stack没有该实例,则创建新实例;
“singleTask”和”singleInstance”则只产生一个实例,并且是Task的根元素。“standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例;“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。
3.是否允许其他Activity存在于本Task内的区别:
“singleInstance”独占一个Task,其他Activity均不能存在于此Task中,如果它启动一个新的Activity,不管新的Activity的launch mode如何,新的Activity都将运行于其他Task里;
另外三种模式则可以和其他Activity共存。
4.是否每次都生成新实例的区别:
“standar”模式每次都生成一个新的Activity实例;
“singleTop”的Activity如果在Task的Activity Stack顶部则不生成新实例,直接使用此实例,否则生成一个新实例。
“singleeInstance”是其所在Task的Activity Stack里的唯一Activity实例,它每次都会被重用
“singleTask”如果在Task的Activity Stack的顶部,则接收intent,否则该intent会被丢弃,但仍然会该Task返回前台。
分享到:
相关推荐
activity的四种加载模式:<!-- 不写的话也默认是standard --> <!-- standard表示每执行一次startactivity就新建一个实例 singleTop表示每次执行startactivity时,如果当前activity在taskstack的顶端,则不...
区分Activity的四种加载模式。在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。
通过案例深度解析activity的四种加载模式,深度分析Task栈。
ActivityTask是怎么进行设计的,以及Activity四种加载模式。
Android系统中Activity的四种加载模式.pdf
Activity加载模式demo
主要介绍了Android编程之四种Activity加载模式,简要分析了Android编程中涉及的Activity的四种加载模式,具有一定参考借鉴价值,需要的朋友可以参考下
该文档详细介绍了activity在系统栈中的内存分配、加载模式及手动管理activity,同时还包含了相关样例。希望对读者有帮助。
NULL 博文链接:https://lowry.iteye.com/blog/793219
Android笔记之四种launchMode例程,Activity有四种加载模式: standard singleTop singleTask singleInstance
本文给大家介绍Activity的生命周期,如果大家学习过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似。生命周期,并不难理解。一个人的生命周期莫过于生老病死,花儿的生命周期就是花...
加载一个Activity肯定不会像加载一般的类那样,因为activity作为系统的组件有自己的生命周期,有系统的很多回调控制,所以自定义一个DexClassLoader类加载器来加载插件中的Activity肯定是不可以的。 首先不得不了解...
Android Activity 加载模式 测试
当使用Intent跳转至某个目标Activity,需要根据目标Activity的加载模式来加载。 Activity一共有以下四种launchMode: 1.standard:默认,每次使用Intent跳转到目标Activity时都创建一个新的实例。坏处是每次进入都要...
(2)Android动态加载APK文件(代理模式) (3)Hook技术动态加载APK文件中的Activity 二、Android 动态加载dex文件 1.反射方式加载(较麻烦,不介绍),需要反射出具体的方法等 2.接口编程的方式加载(以下重点介绍...
疯狂android讲义第四章4.3节源代码,Activity的生命周期和加载模式
本篇文章主要介绍了android activity的四种状态,详细的介绍了四种状态,包括Running状态、Paused状态、Stopped状态、Killed状态,有兴趣的可以了解一下。
一、Activity的生命周期 首先,我们来了解一下Activity典型的生命周期 一个Activity从启动到结束会以如下顺序经历整个生命...在这个方法中,可以做一些初始化工作,比如调用setContentView去加载界面布局资源,初始化