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
1 Intent intent = new Intent(SrcActivity.this, TargetActivity.class);
2 intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
3 startActivity(intent); 
四种加载模式的区别如下:
一、  所属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里。
 二、 是否允许多个实例的区别:
   standard”和”singleTop”可以允许有多个实例,并且可以位于不同的Task中;
   singleTop要求如果Activity Stack顶部已经有目标Activity实例,则直接讲Intent发送给该实例,而不创建新实例。如Activity Stack没有该实例,则创建新实例;
   “singleTask”和”singleInstance”则只产生一个实例,并且是Task的根元素。“standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例;“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。
 三、 是否允许其他Activity存在于本Task内的区别:
   “singleInstance”独占一个Task,其他Activity均不能存在于此Task中,如果它启动一个新的Activity,不管新的Activity的launch mode如何,新的Activity都将运行于其他Task里;      
   另外三种模式则可以和其他Activity共存。
 四、 是否每次都生成新实例的区别:
   “standar”模式每次都生成一个新的Activity实例;
   “singleTop”的Activity如果在Task的Activity Stack顶部则不生成新实例,直接使用此实例,否则生成一个新实例。
   “singleeInstance”是其所在Task的Activity Stack里的唯一Activity实例,它每次都会被重用。
   “singleTask”如果在Task的Activity Stack的顶部,则接收intent,否则该intent会被丢弃,但仍然会该Task返回前台。 

转载于:https://www.cnblogs.com/retacn-yue/archive/2012/10/27/2761176.html

android activity四种加载模式相关推荐

  1. Activity四种加载模式

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity. ...

  2. 区分Activity的四种加载模式

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity. ...

  3. 区分Activity的四种加载模式(转)

    转自:http://marshal.easymorse.com/archives/2950 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activi ...

  4. Activity的四种加载模式(转载)

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity.可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity.这 ...

  5. 区分Activity的四种加载模式-activity

    转载:http://marshal.easymorse.com/archives/2950 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activi ...

  6. activity的四种加载模式

    在android里,有4种activity的启动模式,分别为: standard, singleTop, singleTask和singleInstance, 其中standard和singleTop ...

  7. Unity—AssetBundle的打包及四种加载资源方式

    AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...

  8. Android图片加载之认识bitmap的四种加载方式

    Android的Bitmap有四种高效加载方式 从获取方式分: (1)以文件流的方式 假设在sdcard下有 test.png图片 FileInputStream fis = new FileInpu ...

  9. Android之Activity的4种加载模式

    一个Task可以理解成一个Activtiy栈,可以装载一个或者多个Activity,回退和打开的顺序逻辑和基本的数据结构栈是一致的.下面的这段话非常关键:那就是,一个Application如果有N个A ...

最新文章

  1. SAP EWM - 物料主数据 - EWM系统存储视图属性
  2. android 相机 全功能,一加7系首个Android 11公测代码暗示了相机应用的诸多功能更新...
  3. lamp php7.0,LAMP(Ubuntu16+PHP7.0)安装Wordpress
  4. JPA 系列教程12-复合主键-2个@Id+@IdClass
  5. pytorch学习笔记(三十三):梯度下降和随机梯度下降
  6. iscsi 挂载教程_Windows Server 2008 R2 建立iSCSI存储的教程(图文)
  7. weblogic domain creation
  8. maven学习七之用户密码修改和添加用户
  9. 《基于深度学习的自然语言处理》中文PDF+英文PDF+学习分析
  10. office文档管理服务器编辑,office在线编辑方案
  11. 使用Python爬虫爬取淘宝商品并分析
  12. [RK3288][Android6.0] Audio录音HAL层的数据读取流程分析
  13. dotnet OpenXML 读取 PPT 主序列进入退出强调动画
  14. odoo12:上传图片,默认显示图标
  15. firefox浏览器window.event is undefined问题
  16. cosolog打印带样式的文字及图片
  17. 【Python】多个文件夹合并到一个文件夹中
  18. 【python】Dpark源码分析
  19. GAN学习:一个简单的GAN搭建
  20. 优派vx2480功能简评

热门文章

  1. vga/dvi/hdmi/dp
  2. opencv 形态转换
  3. lru算法c语言实现单链表,基于单链表实现LRU算法
  4. Java基础学习总结(170)——Java8并发工具类CompletableFuture学习总结
  5. Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
  6. Java基础学习总结(39)——Log4j 1使用教程
  7. 30天python从入门到精通_2019最新《Python从入门到精通之30天快速学Python教程 》
  8. 韩国f4计算机考试在哪报名,2020年F4签证资格考试报名方式及考试日程,错过还要再等3个月!...
  9. 怎么退出mysql_如何安全地关闭MySQL
  10. BIO、NIO、AIO入门认识