`

android 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
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返回前台。

分享到:
评论

相关推荐

    Android Activity的四种加载模式区别

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

    activity的四种加载模式分析

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

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

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

    Android 四种加载模式

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

    Activity加载模式demo

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

    android Activity加载方式

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

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

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

    ActivityTask设计模式

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

    activity属性,加载模式等

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

    Android原生方式实现夜间模式

    有四种模式可供选择:`MODE_NIGHT_NO`(默认模式)、`MODE_NIGHT_YES`(夜间模式)、`MODE_NIGHT_FOLLOW_SYSTEM`(跟随系统设置)和`MODE_NIGHT_UNDEFINED`(未定义)。 ```java public void toggleNightMode() { ...

    Activity加载模式讲解

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

    Android动态加载Activity原理详解

    在Android系统中,动态加载Activity是一项关键的技术,它允许应用程序在运行时动态地加载和启动新的Activity,从而实现模块化和插件化的功能。本文将深入解析Android动态加载Activity的原理,帮助开发者理解和掌握这...

    Android使用Activity用作弹出式对话框

    `Dialog`是Android提供的一种轻量级窗口,通常用于显示简短的信息或让用户做出选择。然而,当对话框需要包含大量内容、多个输入字段或者自定义布局时,`Dialog`可能无法满足需求,这时我们可以考虑使用`Activity`。 ...

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

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

    ViewPager加载Activity

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

    android activity和task

    5. Activity的四种加载模式: - 标准模式(Standard):每次启动都会创建新的实例,可以放入任何Task。 - 单实例模式(SingleInstance):在整个系统中只有一个实例,且总是在新的Task中启动。 - 单任务模式...

    android 九宫格模式实现多个activity的切换

    在Android应用开发中,"九宫格模式"是一种常见的用户界面设计,通常用于展示一系列功能或选项。这种设计使得用户可以方便地通过点击九个图标中的任一个来启动不同的Activity,实现不同功能间的快速切换。在本文中,...

    Android代码-不重启实现日夜间模式切换

    实现了日夜模式的切换.(不重启 Acitivity ) 解决了因为快速点击 View 导致的多次响应点击事件. 内部实现了 Android 5.0 的CircularReveal效果. 优点: 布局中直接使用 Android 默认的控件就可以.在解析以后会根据...

    Android 仿照progress动态加载进度.zip

    在Android开发中,Progress Bar是用户界面中常见的一种组件,用于指示某个操作的进度或状态,比如文件下载、网络请求等。"Android 仿照progress动态加载进度"这个项目主要展示了如何在Android应用中实现一个自定义的...

Global site tag (gtag.js) - Google Analytics