`
lovecontry
  • 浏览: 1095091 次
文章分类
社区版块
存档分类
最新评论

Activity的四种加载模式

 
阅读更多

  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的四种加载模式

    activity的四种加载模式:&lt;!-- 不写的话也默认是standard --&gt; &lt;!-- standard表示每执行一次startactivity就新建一个实例 singleTop表示每次执行startactivity时,如果当前activity在taskstack的顶端,则不...

    Android Activity的四种加载模式区别

    总之,Android的四种Activity加载模式提供了一种灵活的方法来管理Activity实例和任务,帮助开发者实现更高效、更流畅的应用体验。在设计应用程序的导航流程时,充分理解和利用这些模式是非常重要的。

    activity的四种加载模式分析

    Activity 的四种加载模式对于应用程序的导航和行为有着显著的影响。理解这些模式对于优化用户体验和避免意外的行为至关重要: 1. standard 模式是最常见的,每次启动 Activity 都会创建新的实例。这可能导致 Task ...

    Android系统中Activity的四种加载模式.pdf

    Android系统中Activity的四种加载模式 Android系统中的Activity是一种非常重要的组件,它是Android应用程序的基本组成单元之一。在实际的Android应用程序中,一个Android软件往往包含多个Activity,每个Activity...

    ActivityTask设计模式

    ActivityTask是怎么进行设计的,以及Activity四种加载模式。

    Activity加载模式demo

    本示例"Activity加载模式demo"将深入探讨四种不同的Activity加载模式,并通过代码演示如何实现它们。 1. **标准模式(Standard)** 标准模式是最常见的Activity加载模式,也是默认模式。在这种模式下,每次启动...

    Android四种Activity的加载模式最新版本

    在设计应用时,开发者应该根据实际需求选择合适的Activity加载模式。例如,如果需要确保Activity的唯一性,可以使用SingleInstance或SingleTask模式;如果希望每次启动都保持新的实例,则可以选择Standard模式;如果...

    Android 四种加载模式

    ### Android 四种加载模式详解 在Android应用开发中,理解Activity的加载模式至关重要,它直接关系到应用程序的性能和用户体验。本篇文章将深入解析四种加载模式:`standard`、`singleTop`、`singleTask`和`...

    activity属性,加载模式等

    `Activity`的属性和加载模式对于理解Android应用的行为至关重要。这篇博客文章可能深入探讨了这些概念。 首先,让我们来了解一下`Activity`的一些基本属性: 1. **标签(Label)**:这是显示在用户界面上的文本,...

    Activity加载模式讲解

    在Android应用开发中,Activity是用户界面的基本组件,它负责展示和交互。本文将深入探讨Activity的加载模式以及其...阅读提供的"Activity加载模式及生命周期"文档,将有助于你深入理解这些概念,并将其应用于实践中。

    Android编程之四种Activity加载模式分析

    本文将详细解析Android编程中的四种Activity加载模式:standard、singleTop、singleTask和singleInstance,帮助开发者更好地理解和掌握Activity的生命周期及切换逻辑。 首先,Activity的状态主要有四种:活动的...

    android Activity加载方式

    接下来,我们将详细讨论Android Activity的四种加载模式:standard、singleTop、singleTask和singleInstance,并通过示例分析它们之间的区别。 1. **standard(标准模式)** 这是Activity的默认加载模式,不需要在...

    动态加载Activity1

    在Android应用开发中,动态加载Activity是一种提高应用灵活性和可扩展性的技术。它允许开发者在应用运行时根据需要加载不同的Activity,而不是在编译时就固定下来。这为实现插件化开发提供了基础,使得应用能够加载...

    ViewPager加载Activity

    总的来说,"ViewPager加载Activity"是一种特殊的设计模式,它结合了ViewPager的滑动特性与Activity的功能,提供了独特的用户体验。但请注意,这并不是最佳实践,因为它可能带来额外的复杂性和潜在的问题。在大多数...

    Android-skin-sprite另一种不重启Activity切换Android夜间模式的库

    而“Android-skin-sprite”库提供了一种无需重启Activity就能实现夜间模式切换的解决方案。这个库主要用于动态改变Android应用的主题和皮肤,使得用户可以在不同光线环境下舒适地使用应用。 首先,我们来理解...

    Android动态加载Activity原理详解

    `ActivityInfo`包含了Activity的元数据,如启动模式、主题等,而`loadedApk`则包含了与应用相关的所有信息,如类加载器、资源等。 在启动过程中,`ActivityClientRecord`的`packageInfo`字段起初为null,需要通过`...

    TabHost加载Activity及自定义底部导航栏的实现

    总结,TabHost加载Activity和自定义底部导航栏是Android开发中常见的界面设计模式。通过合理的配置和事件处理,可以构建出功能丰富的、用户体验良好的多页面应用。同时,自定义底部导航栏不仅可以增强应用的视觉效果...

    一个Activity根据不同的状态加载不同的布局.rar

    本资源"一个Activity根据不同的状态加载不同的布局.rar"可能包含了实现这一功能的相关代码示例。 首先,我们要理解Android Activity的生命周期。在Activity的不同阶段,如onCreate(), onStart(), onResume(), ...

Global site tag (gtag.js) - Google Analytics