`
liujianguangaaa
  • 浏览: 237472 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

读《Multitasking the Android Way》(一)

阅读更多

Android Developers Blog 发表了一篇题为《Multitasking the Android Way》的博文,读起来颇为有趣。我将博文中的关键信息加以自己的理解,简单整理成以下文字,以便日后查阅之便。能力有限,误读和错读难以避免,阅读者应该坚持怀疑的态度来阅读本文,尽信书不如无书。

同时运行多个应用程序,即 Multitask,对于现在的 OS 来说,是个稀松平常的事情,–IPhone OS 另当别论。Android 对 Multitask 的处理方式有着自己独到之处,这让从其他平台转来的开发者有点发懵。凡事知其然,更要知其所以然,要设计出和 Android 完美“融合”的应用程序,理解 Multitask 是非常有必要的。这篇博文从设计考量出发,告诉你问题的大环境是什么,然后讲述现在的处理机制对于应用程序的影响,最后引出开发者应该如何利用好这一机制。

移动设备,例如手机等,有着苛刻的技术限制,内存、电量、运算速度等都不能和 PC 相提并论,用户体验更不能照搬桌面软件或者 web 系统,任何试图在移动设备上建立起和 PC 相等的用户体验是一种不怎么明智的想法。

Android 设计者在设计 multitask 时充分考虑到了这些,并归纳成四点设计考量:

  1. 应用程序在完成后,无需关闭。
  2. 系统交换空间并不充裕,内存使用有苛刻的限制。
  3. 应用程序间切换十分关键,启动一项新应用的时间被限制在1秒之内。
  4. API 不仅要能满足第三方开发者,并且必须足以支持创建内置的 Google 应用,all applications are created equal 。

很明显,前两点是冲突的。Android 淡化“关闭应用程序”这一常见的操作,相反 Android 想让用户感觉到所有的应用程序一直都在运行当中。与此同时,移动设备都有着比较苛刻的内存限制,因此一旦它需要的内存超过了可用的内存,系统就会很快变慢。这一对矛盾一直伴随着 Android 设计过程。

对 Android multitask 的一个常见误解是混淆进程和应用之间的差别。Android 里,用户可能看到了应用,实际上却没有进程在运行;多个应用可能共享一个进程,也可能一个应用使用了多个进程;应用可能没有在做任何事情,但是进程却会一直被保留。

事实上,进程正在“运行”,并不能等同应用就在运行,或者说在执行什么操作。用户离开应用,Android 会自行处置进程,如果判定稍后还需要这个它,则就会保留它,也有可能用户刚刚离开应用,Android 就清除掉了这个进程,但是这并不妨碍用户返回到刚刚离开的地方。

这种处理方式的关键是要明白进程并没有被彻底地关闭。当用户离开应用,应用进程会被保留在后台,需要的话,会允许它继续工作。如果用户返回应用,则进程立即进入到前台。假设设备从不会用完内存,那么 Android 就会保留所有的进程,并且让它们一直“运行”下去。

当然了,只有人的欲望才是无限的,机器的内存总是有限的,Android 在这一点上是非常清楚,因此它必须决定在什么时间清除掉不必要的进程。Android 会有规则来判断每一个进程的重要性以及哪一个进程应该被清除。这些规则基于两个因素:该进程对当前用户体验的重要性和距离上次使用到该进程的时间间隔有多久。

一旦 Android 决定要清除掉某个进程,那么它就会用简单粗暴的方式直接 KILL 它,同时内核会立即跟进,不管三七二十一,回收这个进程持有的所有资源。

如果用户返回到了进程已被杀死的应用,Android 需要有一种方法能够重新启动,并且恢复到此前的最后状态。通过跟踪用户关心的 Activity,记录观察到的状态信息,并使用最后的状态信息重新启动 Activity,Android 成功营造出了营造“all applications are running all of the time”的假象。用户每次离开 Activity,系统就会生成新的状态,–注意不是在进程被KILL时!正因为保留了最后的状态信息,所以内核才可以“肆无忌惮”地杀死进程。

某种意义上讲,Android 的进程管理可以被视为一种 swap space:应用进程代表了正在使用的内存的大小;当内存少了,一些进程会被杀死(相当于 swapped out);当这些进程被再次需要的时候,它们就会从最后保存的状态(swapped in)中恢复,重新启动。

分享到:
评论

相关推荐

    Python库 | multitasking-0.0.10.tar.gz

    标题中的"Python库 | multitasking-0.0.10.tar.gz"指的是一个名为`multitasking`的Python库的版本0.0.10,它被打包成`.tar.gz`格式的压缩文件。这种格式通常用于在Unix-like系统或Python环境中分发源代码包。`.tar....

    Android SDK (SDK Platforms)-android-16.zip

    在本案例中,我们关注的是"Android SDK (SDK Platforms)-android-16.zip",这是一个针对Android 4.1(代号Jelly Bean)平台的SDK组件。Android 16是Android操作系统的一个重要版本,它于2012年推出,引入了许多新...

    Android-API合集

    Android API合集是一个重要的资源,对于开发者来说,它包含了Android操作系统中各种接口、类和方法的详细信息。这个集合是Android开发过程中不可或缺的参考材料,它涵盖了从基础组件到高级功能的各种知识点。以下是...

    multitasking_1.70

    更新时间:2011-08-11资费提示:免费版当前版本:1.70软件语言:中文软件类别:进程管理软件大小:157 KB适用固件:2.1及更高固件内置广告:没有广告适用平台:Android 软件介绍 MultiTaskin Pro可以让您在正在运行...

    Android开发的官方demo

    ApiDemos项目是Android SDK的一部分,它展示了一系列的示例小应用,涵盖了Android系统中的各种组件、服务和API。通过这个项目,开发者可以了解到如何使用Android框架进行实际的编程工作。 在ApiDemos中,你可以找到...

    multitasking:使用装饰器的非阻塞Python方法

    MultiTasking是一个很小的Python库,可让您简单地通过使用装饰器将Python方法转换为异步,非阻塞方法。 例子 # example.py import multitasking import time import random import signal # kill all tasks on ctrl...

    MIT JOS Lab 4: Preemptive Multitasking

    MIT JOS(Journey Operating System)实验是麻省理工学院操作系统课程的一部分,旨在让学生深入理解操作系统的工作原理。在JOS Lab 4中,我们将探讨的是“抢占式多任务处理”,这是现代操作系统中的一个关键特性,它...

    android-16

    "Android-16"指的是Android操作系统的一个特定版本,也称为Android 4.1 Jelly Bean。这个版本在2012年发布,是Android系统发展中的一个重要里程碑,它带来了许多性能改进和新特性,旨在提升用户体验和开发者的工作...

    Android 9Pie操作手册.rar

    Android 9 Pie,简称Android P,是Google推出的一款针对Android设备的操作系统更新,带来了诸多新特性和改进,旨在提升用户体验、效率和安全性。本手册详细介绍了Android 9 Pie的主要功能和开发者适配指南,为...

    ios应用源码之后台运行(multitasking)以及本地通知(local noti

    本资源“ios应用源码之后台运行(multitasking)以及本地通知(local notifications)”提供了一个完整的背景运行和本地通知实现的示例,包含了图片、书籍资料以及相关的代码,打包名为“backgrounddemo(beta4fixed)”。...

    android 5.1.1 Api22 sdk源码

    Android 5.1.1 API 22 SDK源码是一个庞大的开发资源库,包含了Android操作系统在5.1.1版本中的所有核心组件、框架服务、系统库以及开发者工具的源代码。这个源码对于深入理解Android系统的工作原理、进行系统级别的...

    iOS.9.For.Users.and.Developers.B0151VT3KA

    Other changes include Keyboard changes, improvements to Search, changes to the way News is handled. Additionally, Updates to Siri, new features on Notes, Multitasking, System Fonts, updates in ...

    Embedded Multitasking

    状态机是一种广泛使用的编程模型,它通过定义一系列的状态以及在不同状态之间的转换来模拟复杂的逻辑流程。在嵌入式系统中,状态机特别适用于实现有限的任务集合和简单的控制流。通过将每个任务视为一个状态机,可以...

    ABB多任务Multitasking选项应用.7z

    ABB机器人多任务(Multitasking)选项是一种高级功能,它允许ABB机器人系统同时执行多个任务,从而提高了生产效率和灵活性。对于ABB机器人初学者来说,理解并掌握这一特性至关重要,因为这将帮助他们更好地设计和...

    英文原版-Samsung Galaxy Tab 10 1 For Dummies 1st Edition

    A vast improvement over the original Galaxy Tab, the 10.1 uses the latest version of the Android operating system and is a 4G LTE mobile device. These upgrades—along with many others, including the ...

    Cooperative multitasking using coroutines (in PHP!).pdf

    这一技术允许开发者在不使用传统的线程或进程的多线程或多进程模型的情况下,通过协作式的任务切换来达到同时执行多个任务的效果。 描述部分提到文章将介绍如何使用协程在PHP中实现任务调度,意指PHP5.5中新增的...

    Android API

    以上仅是Android API庞大生态的一小部分,开发者可以根据实际需求选择合适的功能进行集成和定制,创造出独特的Android应用。随着Android系统的不断演进,API也在不断更新,提供更多新的特性和工具,以满足现代移动...

    bare-metal-multitasking.rar

    综上所述,“bare-metal-multitasking.rar”可能包含了一个完整的STM32工程,该工程展示了如何在没有操作系统的情况下,通过精心设计的代码实现多任务并行执行,同时满足嵌入式系统的需求。通过深入研究这个项目,...

    The Art of Assembly Language Programming

    The 80x86 MOV Instruction 4.8 - Some Final Comments on the MOV Instructions <br>4.9 Laboratory Exercises 4.9.1 The UCR Standard Library for 80x86 Assembly Language Programmers 4.9.2 ...

Global site tag (gtag.js) - Google Analytics