`

Android自学笔记:Tasks and Back Stack原理

阅读更多
一、参考文章
        原文地址:Tasks and Back Stack
        本地地址:
.\android-sdk-windows\docs
\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新款手机视频介绍,视频上那人用触屏的方式展示了那款手机的新功能,操作起来非常得行云流水,连贯性极强,之后我就明白了这就是传说中的“无缝衔接”的用户体验,所以就在此基础上学习并翻译了这篇文章,达到了事半功倍的效果。



1
0
分享到:
评论

相关推荐

    Android学习笔记-Activity篇

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

    Data Mining and Analysis: Foundations and Algorithms(2014)

    The book lays the basic foundations of these tasks, and it also covers cutting edge topics such as kernel methods, high dimensional data analysis, and complex graphs and networks. It integrates ...

    Programming: Principles and Practice Using C++

    The book presents modern C++ programming techniques from the start, introducing the C++ standard library to simplify programming tasks.For Beginners–And Anyone Who Wants to Learn Something NewThe ...

    Android Programming: The Big Nerd Ranch Guide, 3rd Edition

    Title: Android Programming: The Big Nerd Ranch Guide, 3rd Edition Author: Bill Phillips, Chris Stewart Length: 624 pages Edition: 3 Language: English Publisher: Big Nerd Ranch Guides Publication Date:...

    Managing Gigabytes: Compressing and Indexing Documents and Images

    Of all the tasks programmers are asked to perform, storing, compressing, and retrieving information are some of the most challenging--and critical to many applications. Managing Gigabytes: Compressing...

    Calendar Tasks and Notes.pdf

    根据给定文件的信息,我们可以详细地探讨蓝牙技术中的“日历任务与笔记”(Calendar Tasks and Notes,简称CTN)这一特定配置文件的功能、应用场景及其技术背景。 ### 标题:Calendar Tasks and Notes (CTN) 该...

    linux学习笔记:进程

    本篇笔记主要探讨了以下几个方面的知识点: 1. **进程状态**: - **可运行态(TASK_RUNNING)**:进程正在CPU上执行或等待执行。 - **可中断的等待(TASK_INTERRUPTIBLE)**:进程被挂起,直到特定条件满足才能恢复。...

    Android-Tasks:我来自 HackBulgaria 课程的 android 解决方案

    【Android-Tasks: HackBulgaria 课程的 Android 解决策略】 在移动开发领域,Android 是一个占据主导地位的操作系统,而 Java 作为其主要的编程语言,是开发者构建应用程序的基础。"Android-Tasks" 项目是 ...

    The Android Developer’s Cookbook: Building Applications with the Android SDK

    Implementing threads, services, receivers, and other background tasks Providing user alerts Organizing user interface layouts and views Managing user-initiated events such as touches and gestures ...

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    Android, the next-generation open mobile platform from Google and the Open Handset Alliance, is poised to become a significant player in the mobile device market. The Android platform gives developers...

    tasks-android-sample

    在android平台上使用google tasks api的示例程序,包含google play services 依赖库

    Red Hat Enterprise Linux 7: Desktops and Administration

    Red Hat Enterprise Linux 7: Desktops and Administration by Richard Petersen English | 1 Aug. 2017 | ISBN: 1936280620 | ASIN: B074HDR7XV | 1156 Pages | AZW3 | 5.21 MB This book examines Red Hat ...

    The Busy Coders Guide to Android Development最终版2019

    Android and Projects Tutorial #2 - Creating a Stub Project Getting Around Android Studio Contents of Android Projects Introducing Gradle and the Manifest Tutorial #3 - Manifest Changes Some Words ...

    Gradle.for.Android.1783986824

    Create custom Gradle tasks and plugins for your Android projects Configure different build variants, each with their own dependencies and properties Manage multi-module projects, and integrate modules...

    [Android] Developing Android on Android (英文版)

    [Packt Publishing] Developing Android on Android Automate Your Device with Scripts and Tasks (E-Book) ☆ 图书概要:☆ Take advantage of the open, tinker-friendly Android platform and make your ...

Global site tag (gtag.js) - Google Analytics