`

Android Activity的4种TaskMode

阅读更多
只是自己看。
1. 标准
2. SingleTop
3. SingleTask
4. SingleInstance

1.
不用说,标准方式,只有一个Task 启动一个activity则会放一个activity到Task(个人理解为栈)中
即使是启动同样的activity也会一直放入堆栈中。当用户返回时则一个activity一个的退回。
2. SingleTop.
同标准模式。只有一个Task,只是当栈顶的Activity和要启用的Acitivity相同时。则不会启动新的Acitivity。
也就是说不会生成新的Activitys实例. 如果要启用Activity在Task中但不在栈顶,那也会生成新的Acitivty.
3. SigngleTask.
比2更进一步。依然只有一个Task.
然后忘了汗啊。

引用:
singleTask模式和后面的singleInstance模式都是只创建一个实例的。

当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

只是注意因为要重用这个Activity,则这个Acitivty会在栈顶,那么之前的singleTask上面的Activity就会被移出栈。


4. SingleInstance.
这个Acitivty只会有一个实例,在一个单独的Task中只Task只有这一个Activity。
一个这样的Acitivty,如Google地图,在我们的程序中调用了它定位到成都。
当我们通过 Home把程序放入了后台。 那个当我们打开google地图时。这个Acitivity 还是在之前定位的位置。注意这不是通过SaveInstaceStatus保存的。这个Activity也没有重新Create.

注意:ActA,ActA2为标准模式,ActB为SingleInstance.
程序启动了ActA, 通过ActA启动了ActB若ActB是一个SingleInstace.
那个ActA和ActB会在不同的Task中。
若ActB又启用了ActA2.那么ActA2和ActA1在一个Task中。
这里我们在ActA2按返回会回到ActA1.而不是ActB.
可以理解为ActB是一个单独的栈中,而返回是回到上一个栈。



引用:
关于singleTask这个网上颇有争议,包括google api上的说明也让我看的是一头雾水,自己用实例亲测,终于算是搞清楚了

正解:1.singleTask 并不一定处于栈底

   2.singleTask 并不一定会是栈底的根元素 

    3.singleTask 并不一定会启动新的task  

     情况一:如果在本程序中启动singleTask的activity:假设ActivityA是程序的入口,是默认的模式(standard),ActivityB是singleTask 模式,由ActivityA启动,刚ActivityB不会位于栈底,不是根元素,不会启动新的task,此种情况ActivityB会和ActivityA在一个栈中,位于ActivityA上面

  情况二:如果ActivityB由另外一个程序启动:假设apkA是情况一中的应用,apkB是测试程序,在apkB中启动apkA中的ActivityB,刚ActivityB会位于栈底,是根元素,会启动新的task


注意:singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己,切记切记


详见:
http://marshal.easymorse.com/archives/2950
http://www.cnblogs.com/xiaoQLu/archive/2011/09/29/2195742.html

补充:
亲测,在返回时主栈退入结束后会回退到SingleInstace页面。
补充2:
再测SingleTask.
可以明确的确只会有一个实例。
上面的也的确是正解.
当我们在一个程序A中使用其它程序B的SingleTask ActB实例时,若该Activity并没有实例,则会生成在一个新实例并放入新的Task tb中(若此时启动B中新的标准Activity也会放入这个新的Task tb中). 通过返回会回到A程序。
若ActB已经开启,则ActB依然在原来的Task tb中。并不会放入到A程序中的栈。且tb会成为当前栈.按返回会跳到tb中的下一个Activty. 一直到这个Task中没有Activity实例。
最后回到A。
分享到:
评论

相关推荐

    Android activity-alias别名的使用

    Activity别名是一种特殊的AndroidManifest.xml中的声明,它为已存在的Activity提供一个可替代的标识。当用户通过别名启动Activity时,系统实际上会启动别名所指向的原始Activity。别名可以有自己的启动模式、权限和...

    Android Activity 实时模糊效果

    在Android开发中,Activity是应用程序的基本构建块,用于表示用户界面。实时模糊效果是一种常见的设计手法,用于在某个视图或Activity背后创建一种半透明、模糊的视觉效果,以突出显示前景内容。这种效果通常用于...

    android activity4种启动模式测试

    Android提供了四种不同的启动模式:标准模式(Standard)、单实例模式(SingleTop)、单任务模式(SingleTask)和单栈顶模式(SingleActivity)。下面我们将详细探讨这四种模式的特性和应用场景。 1. **标准模式...

    android Activity 四种启动模式例子

    本项目提供了对Android Activity四种启动模式的实例演示,让我们逐一深入理解这四种模式。 1. standard(标准模式) 这是Activity的默认启动模式。在standard模式下,每次启动一个Activity都会创建一个新的实例,...

    Android Activity生命周期

    4. onResume():Activity 恢复时调用,表示 Activity 已经可交互。 5. onPause():Activity 暂停时调用,表示 Activity 不可交互,但仍然可见。 6. onStop():Activity 停止时调用,表示 Activity 不可见,已被隐藏...

    Android Activity的四种加载模式区别

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

    android activity右进右出动画

    在Android开发中,Activity是应用程序的基本组件,用于承载用户界面。Activity之间的切换动画可以极大地提升用户体验,"android activity右进右出动画"就是一个常见的应用场景,它使得应用在切换时具有更加自然、...

    android Activity 详述 demo

    在Android应用开发中,Activity是核心组件之一,它代表了用户界面的一个屏幕或者一个交互窗口。这个"android Activity 详述 demo"旨在深入探讨Activity的工作原理及其在实际应用中的使用方式。通过链接给出的博客...

    android Activity之间数据的回传

    通常,Android中有两种启动Activity的方式:`startActivity()`和`startActivityForResult()`。`startActivity()`主要用于简单的Activity跳转场景,它不会涉及到数据的回传。但是当我们需要从被启动的Activity回传...

    android activity的一些特效

    4. **转场动画**:Android提供了Transition API,用于在两个Activity之间创建平滑的转场效果。例如,共享元素转场可以让一个UI元素在两个Activity间无缝移动,增强用户感知的一致性。 5. **Fragment交互**:...

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...

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

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

    android activity 动画切换

    首先,我们需要了解Android中的两种主要动画类型:属性动画(Property Animation)和视图动画(View Animation)。属性动画系统是自Android 3.0(API级别11)引入的,它允许我们改变对象的任意属性并观察结果;而...

    Android activity切换的动画效果

    在Android应用开发中,Activity是用户界面的基本单元,它负责展示屏幕上的内容并处理用户交互。当用户在应用中从一个Activity切换到另一个时,Android系统提供了丰富的动画效果来提升用户体验,使应用看起来更加流畅...

    android Activity 设置背景透明

    在Android开发中,Activity是应用程序的基本构建块,用于展示用户界面和处理用户交互。当我们希望Activity的背景变得透明,以实现如悬浮窗、半透明过渡效果等设计需求时,就需要对Activity进行一些特殊的配置。本篇...

    Android 悬浮Activity ( Dialog风格)

    总的来说,"Android悬浮Activity ( Dialog风格)"是通过自定义Activity样式和窗口属性来实现的一种交互方式。开发者可以通过这种方式创建轻量级的、易于访问的小部件,提高用户体验。同时,结合`CameraDemo`,我们...

    Android activity动画案例

    首先,Android提供了两种主要类型的动画:视图动画(View Animation)和属性动画(Property Animation)。视图动画在API级别较低的版本中被广泛使用,它改变了对象的视觉外观,但不改变对象的实际状态。而属性动画...

    Android Activity跳转和listview的使用

    在Android应用开发中,Activity是应用程序的基本构建块,它代表用户界面的一个屏幕。理解Activity的跳转和ListView的使用是Android开发中至关重要的技能。在这个主题中,我们将深入探讨如何通过Intent和Bundle实现...

    android中activity跳转的几种动画

    本篇文章将深入探讨如何在Android中实现Activity跳转的几种动画效果。 一、默认动画 在不设置任何自定义动画的情况下,Android系统会使用默认的滑动效果进行Activity切换。这种效果可以通过设置`activity过渡`来...

Global site tag (gtag.js) - Google Analytics