`
37du
  • 浏览: 725 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Task 与Back Task 的LaunchMode学习

阅读更多
1.LaunchMode=“stand”
    a:同一task下。当一个task的back stack中出现的activity顺序为:A->B->C->A->B->C,无论何时在同一个task中,要打开一个activity A,都会重新实例化一个activity A, 这时顺序为:A->B->C->A->B->C->A。当你按back button时,会返回7次到主屏幕下(这里的task,我们假设是打开了一个新的应用,task才产生)。
    b:不同task下。当一个task的back stasck中出现的activity顺序为:A->B->C->A->B->C,你的另一个task X的back stack下的activity顺序为:D->T,这时你要在task X下打开一个activity A,这时task X的back stack的activity顺序为:D->T->A,返回3次,才能结束task X。
 
2.LauncheMode=singleTop
    a:同一个task下: 如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。
    b:不同的task下。现在栈的情况为:A B C D,D的Launch mode设置成了singleTop。当你在另一个task X下(T->Y->E),打开activity D,则task X的顺序为:T->Y->E->D,也就是说,在另一个task下,会新实例化一个singleTop 的activity.
3.LaunchMode=singleTask
    a:同一个task下:假设当前的task:A->B,其中Activity B 是singleTask,当在B中跳转到A时,此时A->B->A(按返回键时,顺序:A->B->A),当在A中跳转到B时,此时:A->B->A(按返回键时,顺序:B->A)。
    b:不同的task下:假设当前的task Y:A->B->A,其中avtivity B时single task.当你按home键,再在手机上启动一个应用,此时的Task X,并且执行了一些activity:E->B->E。当task x的activity E跳转到activity B时,这时task x的back stack顺序:为E->B->E->A->B(按返回键:B->A->E->B->E,这时的back stack包含两个task(X,Y),当从B->A返回时,task Y就结束了,当从E->B->E,task X就结束了)
4.LaunchMode=singleInstance
   当一个应用X 的所有的activity(A,B)都在默认的task X下时,其中B是singleInstance,当启动activity A,顺序:A;然后在启动activity B,这时会新建一个task Y,这个task里只有一个activity B.在task Y中的activity A跳转到activity A,这时task X里的顺序:A->A,task Y:B。
最后,在task X中Activity A跳转到activity B时,会检查到有tack Y 里存在activity B,就会直接跳转到task Y的activity B 。这时,又有一个task z(比如按home键,到手机界面上按了一个应用的快捷方式),顺序:U,这时在activity U中跳转到activity B,会检查到有tack Y 里存在activity B,就会直接跳转到task Y的activity B,此时task Z顺序:U,task Y顺序:B。然后我们又假设两种操作:
   1.在task Y中的activity B 跳转到task X的activityA,这时task X顺序:A->A->A,当我们按返回键时,依次为:A->A->A->B->U。此时所有task的顺序为:task X->task Y->task U
   2.在task Y中的activity B中直接按返回键,依次为:B->U.因为此时所有task 的顺序为:task Y->task Z->Launcher->task X(A->A)
分享到:
评论

相关推荐

    Android Activity LaunchMode 验证

    4. **理解任务栈(Task)和返回栈(Back Stack)**:理解Android的Activity管理机制,如任务栈的概念,这对于理解LaunchMode至关重要。例如,singleTask和singleInstance模式会创建新的任务栈,而standard和...

    Activity的launchMode测试

    - **Intent**的传递:`launchMode`会影响`Intent`的传递方式,特别是当`FLAG_ACTIVITY_SINGLE_TOP`与`FLAG_ACTIVITY_NEW_TASK`结合使用时。 总之,`Activity`的`launchMode`是一个强大的工具,可以帮助开发者控制...

    Android学习笔记-Activity篇

    这篇学习笔记将深入探讨Activity的相关知识,包括创建、声明、启动、关闭以及生命周期管理,同时还会涉及Task和Back Stack的管理。 一、Activity创建: 在Android应用中,Activity的创建通常始于一个Java类,这个类...

    安卓Android源码——模拟Activity进出栈.zip

    4. **Task和Back Stack**:Task是多个Activity组成的堆栈,每个Task有自己的Back Stack。当启动一个新的Activity时,系统会根据FLAG和Manifest配置决定将其添加到哪个Task。默认情况下,新启动的Activity会被添加到...

    Android密码锁屏的实现,解决Home,Back问题

    同时,我们还需要在AndroidManifest.xml中为锁屏Activity设置FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP标志,这样即使在其他任务栈中,Home键也无法将其推出: ```xml android:name=".LockScreenActivity...

    【Android】Activity

    允许其他应用启动您的 Activity附:task与back栈 总结自老师的文档 1. 创建一个Activity的流程 1.1. 设计并实现用户接口 衍生自 View 类的视图,控制 Activity 中特定的矩形空间,例如按钮 衍生自 ViewGroup 类的...

    Android 如何在自己的应用中模拟Home键

    需要注意的是,通常情况下,Activity的launchMode默认为`standard`,在这种模式下,每次启动Activity都会创建新的实例。而设置`FLAG_ACTIVITY_NEW_TASK`标志,配合`ACTION_MAIN`和`CATEGORY_HOME`,可以让Activity的...

    Android Activity单例.doc

    `Task`是一个包含多个`Activity`的工作单元,而`Back Stack`则是`Task`中`Activity`的后进先出(LIFO)队列。当用户按返回键时,栈顶的`Activity`会被移除,显示下一层的`Activity`。 了解这些知识点,开发者可以...

    singleTask和singleInstance的测试

    在Android应用开发中,Activity的启动模式(launchMode)是一个重要的概念,它决定了Activity如何被启动以及在任务栈(Task)中的行为。本测试主要关注两种特定的启动模式:singleTask和singleInstance,它们都是...

    Android高级应用源码-模拟Activity进出栈.zip

    在Android系统中,Activity的启动和切换被抽象为一个任务(Task)和一个堆栈(BackStack)。每当用户启动一个新的Activity,系统都会将它压入当前任务的堆栈中。当用户按下返回键或者通过其他方式退出Activity时,...

    深入解析Android系统中应用程序前后台切换的实现要点

    Task的根Activity通常是用户从应用程序启动器中选择的第一个Activity,栈底的Activity设置了Task的属性,如Affinity,它定义了Activity与Task之间的关系。Affinity决定了Activity倾向于属于哪个Task,从而影响...

    SingleTaskDemo

    当我们谈论Activity的栈管理时,我们通常是指Android系统如何使用任务(Task)和回退栈(Back Stack)来组织和控制Activity的生命周期。"SingleTaskDemo"这个项目很可能是为了演示如何自定义Activity的栈管理,以便...

    Android 改变Activity切换方式

    默认情况下,Android系统在用户导航时采用栈(后进先出,LIFO)的方式管理Activity,即新的Activity压入栈顶,当用户按下Back键时,栈顶的Activity会被弹出,呈现出栈中的前一个Activity。然而,开发者可以根据需求...

    Android应用源码之模拟Activity进出栈.zip

    在Android系统中,Activity的启动和切换遵循着一个称为"任务(Task)"和"回退栈(Back Stack)"的模型,这使得用户可以按后进先出(LIFO)的顺序操作活动。 首先,理解Activity的生命周期至关重要。Activity有多种...

    Activity_one

    3. **栈管理**:Android系统使用任务(Task)和回退栈(Back Stack)来管理`Activity`。新启动的`Activity`会被压入栈底,当前显示的`Activity`位于栈顶。按下后退键时,栈顶的`Activity`被弹出,呈现上一个`...

    Activity详细剖析之使用范例

    Android使用任务(Task)和栈(Back Stack)管理Activity。默认情况下,新启动的Activity会被压入栈顶,按后进先出(LIFO)原则处理。当用户点击返回键,栈顶的Activity会被弹出,呈现前一个Activity。 五、配置...

    activity 四种工作模式

    这种模式下,回退栈(back stack)中的Activity数量会随着用户操作增多,可能导致资源消耗增加。 2. **单例模式(SingleTop)** 在这种模式下,如果新的Activity实例试图被压入栈顶,而当前栈顶已经存在该Activity...

    Android开发 - Activity 初步

    Android使用任务(Task)和回退栈(Back Stack)来管理Activity。每个任务是一个Activity的堆栈,新的Activity被压入栈顶,按后进先出原则处理。按下设备的返回键,会弹出栈顶的Activity并销毁。 **源码分析** 博客...

Global site tag (gtag.js) - Google Analytics