`
ictch
  • 浏览: 137084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android:Tasks and Back Stack原理

阅读更多


一、参考文章 
        原文地址:Tasks and Back Stack 
Java代码  收藏代码
  1. .\android-sdk-windows\docs  
  2. \guide\topics\fundamentals\tasks-and-back-stack.html  

二、术语解释 
        1.task:一系列activity的集合,这些activity就可以看成是一个任务。 
        2.back stack:一系列activity的存储结构,因其遵循后进先出的原则,所以我个人译为“回退堆栈”,但本文仍沿用英文代表其原义。 

三、本文主旨 
        Android推崇一种用户体验方式,即不同应用程序之间的切换能使用户感觉就像是同一个应用程序,很连贯的用户体验,官方称其为seamless (无缝衔接);那么,这种用户体验的实现原理是怎样的? 

四、BackStack原理 
        我们首先来看一个图,该图展示了多个activity之间的切换并以时间线为线索展示这种行为,有些类似与UML中的时序图, 

如下: 

 



        要想理解此图,首先一定要弄明白什么是堆栈,堆栈的特性后进先出(LIFO),两个主要操作压入(push)和弹出(pop)。 

        我们在来看图中的back stack,栈顶的activity都是用户当前看到的activity;每当用户切换到一个新的activity时, 

Android就会将其压入到stack back,使其成为栈顶,也就是用户当前看到的activity;栈顶后面的activity此时呈stop状态,对应着Activity生命周期方法中的onStop(),并且Android还会保留其状态(比如文本框上的文字等)。这是压入操作。 

        当用户按下BACK键,Android就会将back stack顶部的activity弹出来,紧随其后的activity顶上去,就实现了回退的功能。被弹出的activity此时呈destroy状态,对应着onDestroy(),新栈顶activity呈resume状态,对应着onResume()。这是弹出操作。 

        这个底层原理弄明白之后,高层的执行流程就很容易理解了,这里不做说明了。利用堆栈这种数据结构的特点很好地实现了“无缝衔接”的用户体验,而且效率也是蛮高的, 

五、任务原理 
        再来说说任务,根据“术语解释”当中介绍的,一个任务里面肯定会包含一个back stack,如果没有back stack的话,那么任务也就会结束了。理解这一点,我们可以引出下文。 

        任务的生命周期,简约版: 
        1.任务开始,按HOME键(这里要提出的是,如果你选择的应用程序先前没有打开过,也就是说没有开始一个任务,才会新 

建一个任务)。 
        2.任务结束,一直按BACK键,直至回到HOME界面(未必只有此方式,有可能还是Android系统为回收内存而强行结束任务)。 

        任务的特点——聚合性: 
        所谓聚合性,指的就是任务中的那些activity会作为一个整体进行移动操作,比如将该任务放置到后台或前台。如下图: 
 

        此图描述的就是Android中的多任务场景,任务A和任务B内部都含有一个back stack,两个back stack互不干扰;当想切换回任务A时,只需按HOME键,再去选择先前的那个应用程序的icon即可。 

        另外针对任务,原文还指出了另外一个特性,同一个任务或不同任务中都可以保有多个相同的activity,如下图: 
 


        此特性是受back stack的特性限制而造成的,堆栈是一个LIFO的数据结构,所以说你不能够随便地更改它的数据顺序,因此上图中就有两个的Home Activity,但它们并不是同样的实例,而且状态也都是不一样的。 

六、总结 
        起初看到这块的时候,并不理解“无缝衔接”到底讲述的是啥意思;突然某一天在网上看到一个Android新款手机视频介绍,视频上那人用触屏的方式展示了那款手机的新功能,操作起来非常得行云流水,连贯性极强,之后我就明白了这就是传说中的“无缝衔接”的用户体验,所以就在此基础上学习并翻译了这篇文章,达到了事半功倍的效果。 

分享到:
评论

相关推荐

    Android学习笔记-Activity篇

    六、Tasks and Back Stack: 1. 管理Task:Task是Android中的一系列Activity堆栈,代表用户的操作序列。每个Task有自己的Back Stack,用于存储按启动顺序排列的Activity。 2. 定义launch模式:在AndroidManifest.xml...

    ciclo-vida-activity-android:理解活动生命周期的例子

    9. **任务和栈(Tasks and Back Stack)** 活动可以组织在任务(Task)中,每个任务都有一系列的回退栈。默认情况下,新启动的活动会被添加到当前任务的栈顶,但可以使用Intent标志(如FLAG_ACTIVITY_NEW_TASK)来...

    Android任务管理器源码.zip

    1. **任务与活动(Tasks and Activities)** - 在Android中,任务(Task)是一组相关的Activity堆栈,它们按照启动的顺序排列,最新的Activity位于栈顶。任务管理器负责维护这些Activity的生命周期。 2. **...

    Android中文开发指南

    - **回退栈(Back Stack)**:Activity的回退栈遵循“后进先出”原则,当用户按下返回键时,最近的Activity会被弹出栈,直至关闭整个任务。 9. **启动任务 (Starting a Task)** - **启动新任务**:通过Intent设置...

    Android开发指南全中文版

    - **清理堆栈(Clearing the Back Stack):** 清除任务栈中的Activity实例。 - **启动任务(Launching a Task):** 控制如何启动新的任务。 **进程和线程(Processes and Threads)** - **进程(Process):** Android应用...

    android开发学习

    - **清理堆栈 (Clearing the Back Stack)**: 可以通过 Intent 的标志来控制是否清理 Activity 堆栈。 - **启动任务 (Starting a Task)**: 可以通过 Intent 启动新的任务栈。 #### 五、进程和线程 (Processes and ...

    获取系统topActivity demo

    Android应用是基于任务(Task)和栈(Back Stack)的概念运行的,Activity会被压入栈中,当用户切换到其他Activity时,新Activity会被压入栈顶,而原来的Activity则被压在下面。因此,栈顶的Activity就是当前用户...

    获取栈顶的activity

    对于大多数常规应用需求,如导航和回退,Android框架已经提供了标准的处理方式,如使用Intent和back stack。只有在特定场景下,如全局监听或调试,才需要考虑直接获取栈顶Activity。 总的来说,理解和掌握如何获取...

    Android开发指南中文版.doc

    - **清理堆栈(Clearing the Back Stack)** - 控制Activity在返回时的状态,例如是否清除之前的状态。 - **启动任务(Launching Tasks)** - 决定了Activity启动时的行为,例如是否创建新的任务栈。 #### 三、进程...

    android开发指南中文版

    **清理堆栈 - Clearing the Back Stack** - 可以使用`Intent`的标志(如`FLAG_ACTIVITY_CLEAR_TOP`)来清除任务中的某些Activity。 **启动任务 - Launching Tasks** - 可以通过设置`Intent`的启动模式来控制新...

    Android开发指南中文版

    - **清理堆栈 - Clearing the Back Stack** 清理堆栈是指移除任务堆栈中的某些Activity,以便用户无法返回到它们。 - **启动任务 - Starting a Task** 可以通过Intent指定特定的Activity作为新任务的开始。 #### ...

    进阶篇设计高效的应用导航

    系统会自动管理一个返回堆栈(Tasks and Back Stack)或历史屏幕列表,记录用户访问过的屏幕顺序。然而,在特定情况下,开发者可能需要重写返回键的默认行为,以适应应用的特定需求。例如,在应用中嵌入了网页浏览器...

    退出地图应用.zip

    Android使用任务栈(Task Stack)来管理Activity,新的Activity会被压入栈顶,而`finish()`方法会将当前Activity从栈中弹出。要退出应用,可以使用`Intent.FLAG_ACTIVITY_CLEAR_TOP`标志启动主Activity,这将清除...

    Android编程中activity的完整生命周期实例详解

    Activity的生命周期与Android的返回栈(back-stack)紧密相关。返回栈是一种后进先出(LIFO)的数据结构,每个Activity作为栈中的一个元素。当新Activity启动时,它被压入栈顶,而当前Activity则调用`onStop()`。...

Global site tag (gtag.js) - Google Analytics