Android应用程序需不需要手动退出? - 阿智的日志 - 网易博客

标签: android 应用程序 需要 | 发表时间:2011-08-26 11:32 | 作者:(author unknown) Kenji Kee
出处:http://azero.tsang.blog.163.com/

不止一次,也不止一个人问过这个问题。我都回答了:不需要。但是,还是要记录下来。

我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因。

对于Android系统而言,包含“进程”和“服务”。“进程”有正在运行的,也有刚刚离开在后台缓存的。“服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止。

我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离开应用程序。

主页键:
在当前运行的应用程序的任意界面,按下主页键会快速回到手机主屏幕。同时这个应用程序的进程将在后台被暂停并建立缓存,再次启动应用程序时可以方便地返回刚才的界面。(现场被保留)

当然,在你按下主页键回到手机主屏幕时,因设计需要,也有可能会在后台运行一个甚至多个进程和服务,以保证这个应用程序在后台是“活的”。

尽管我们知道了后台会产生各种各样的“进程”与“服务”,但你并不用担心它们会把你的手机拖累。当运行新的应用程序发现内存可能不够用时,系统会自动在后台释放部分缓存在后台的进程,以保障可运行新的应用程序。这是一个智能的、良性的供给体系。

返回键:
Android系统使用返回键来进行屏幕后退,以及关闭对话框/菜单/屏幕键盘。

对于传统的本地客户端应用程序,每个屏幕可以理解为一个活动(Activity)。通过返回键可以快速回退到当前应用程序的上一个活动,也可以离开当前应用程序打开的新的应用程序的某个活动。

所有的活动呈堆栈结构(一种串行形式的数据结构),正在运行的活动处在最顶端。当你按下返回键,会清除当前活动并恢复上一个活动。如下图示例:

Android应用程序需不需要手动退出? - 阿智 - (((azero)))

(配图出处:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )
 

如果你连续按返回键,活动一个个被抽离,就像剥洋葱一样。

在Android的应用程序里,可以通过“意图(Intent)”功能,在当前应用程序(任务)的某个活动来启动另一个应用程序(任务)的某个活动。

比如下图的示例,在“有道词典”主界面单击超链接“意见反馈”打开浏览器访问目标网页:

Android应用程序需不需要手动退出? - 阿智 - (((azero)))


在目标网页界面,你可以使用返回键快速返回刚才的“有道词典”主界面。

而接下来这个例子,体验则是非常糟糕的:

Android应用程序需不需要手动退出? - 阿智 - (((azero)))
 
如上图,在目标网页想要返回上一个任务需要历经几番周折。

一遍又一遍地回退浏览器的浏览历史,甚至还要回到浏览器的起始页,然后弹出一个对话框询问是否要退出。
天哪!我快要疯掉了。
 
Android官方对于多个任务间的活动堆栈处理机制,可以看下面这张图来解释:

Android应用程序需不需要手动退出? - 阿智 - (((azero)))

(配图出处:http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html )


从图中我们可以看到,一开始在后台的“任务B”的“活动Y”经由“任务A”的“活动2”的一个按钮抽调到了前台,而随着“任务B”的活动一个个被剥离,最终整个“任务B”被结束了,并且使用返回键又回到了“任务A”的“活动2”。

返回键实现了调用新任务之后快速返回的便利,而不是只能迂回地回到应用程序列表并找到上一个使用的应用程序再次启动。

当所有活动从堆栈中清除,任务结束。也就是说,在应用程序的主界面按下返回键时,应用程序就已经退出了。

除非,这个应用程序设计了后台运行的进程和服务。比如"新浪微博",即使你在应用程序主界面按下返回键退出了,在“程序管理”>“正在运行”界面上仍然可以看到正在运行的进程和服务。(需通过菜单键切换至“显示当前运行的服务”视图)

正如上面提到的,后台服务是一个无界面、长时间运行的应用功能,并且不会轻易被终止,即便你使用“任务管理器”。(其实可以在“服务”界面找到它并且手动停止服务,只不过没有这个必要性,交给系统自动处理即可。长时间不使用某个任务时,系统会认为你已经不再需要了并且会自动帮你结束。)

至此,我们已经知道为什么Android应用程序不需要手动退出了。因为聪明的系统已经帮助用户做了许多事情,包括退出应用程序以及恢复可用内存。

受限于Android官方对设计规范的态度,Android并没有像iOS那样明文告诉设计者不需要这个不需要那个。Android应用程序的设计模式也因此而“百花齐放”,很难形成较为统一的体验。比如本文提到的需不需要手动退出Android应用程序的话题,如果在iOS中看到屏幕上有退出应用程序的按钮,是一件搞笑的事情。

无论如何,Android也好iOS也罢,用户本来就不需要关注“进程”或“内存管理”、“任务管理”这些东西。用完,离开界面即可,就这么简单!把用户不需要关注的问题抛给用户,无异于“不想让小孩玩火,但是又给他一个打火机。”

而设计师们,该做些什么了。改变吧!

看到这里,也许你会问:既然Android应用程序在后台被挂起暂停了,但是为何开多了应用程序手机还是会变慢呢?

一方面:新运行的应用程序如果需要较大的内存,自然会比较慢。另外,如果手机本身的内存过小且CPU不给力,系统自然会因较频繁地自动结束进程释放缓存而导致手机在某些时候运行比较慢的感觉。

也正因为这样,我们知道了为什么“任务管理器”会如此流行,甚至成了“装机必备”。人们用它来快速提前释放缓存以保证运行新应用程序时有足够的内存。当然,随着CPU频率越来越高,内存越来越大的发展趋势,手动清除缓存已经慢慢变得不再需要。

另一方面:临时启动的后台服务可能会导致手机变慢。有些应用程序在后台监听到指定的事件会自动启动,比如操作系统本身的“Google服务”,又比如连接USB并且在PC上启动“豌豆荚手机精灵”,手机上的“豌豆荚守护精灵”会自动启动。为了避免这种情况,只能建议你有选择性的安装应用程序了。聪明的软件需要先进的硬件来支持。

也许你又会问:既然在应用程序主界面用返回键可以直接退出应用程序,可是为什么某Android应用程序(尤其是国内的)要弹出退出确认对话框呢?

这其实更多的是产品人出于不希望自己的应用程序太容易被用户“退出”,或是担心“误操作”的原因,为此给用户增加一道障碍墙。
瞧瞧我们眼前的PC软件吧!单击窗口右上角的 X 图标后,也有不少软件在做同样的事情呢。

毫不客气地说,这是典型的把责任推卸给用户的做法。似乎在警告用户:“真的要退出了?确定的话我就不管你了!”

我们应该尽可能少使用对话框,提供必要的容错支持。允许用户犯错,并给予恢复的机会。比如你可以允许用户在按下返回键离开应用程序后还能再次返回现场。这在很多优秀的第三方应用程序上均有体现,比如Twitter、米聊……

当然,沉浸式的应用程序除外。比如影片正在播放或者游戏正在进行的画面,应当尽可能地不要让用户犯错被退出。沉浸式的应用程序应当提供沉浸式的体验保障,因为游戏或影片进行到一半被退出往往是无法返回现场的。

最后,补充说明:本文所说的“退出”是指退出应用程序,而不是指退出帐户的登录状态。如果你的应用程序是需要用户使用帐号密码登录的,那么提供“退出登录”(或叫“注销”)的功能是必要的。

相关 [android 应用程序 需要] 推荐:

Android应用程序需不需要手动退出?

- Jackie - 互联网的那点事
不止一次,也不止一个人问过这个问题. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含“进程”和“服务”. “进程”有正在运行的,也有刚刚离开在后台缓存的. “服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离开应用程序.

Android应用程序是否需要手动退出

- Tomy - Tech2IPO
不止一次,也不止一个人问过这个问题. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含“进程”和“服务”. “进程”有正在运行的,也有刚刚离开在后台缓存的. “服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离开应用程序.

Android应用程序需不需要手动退出?

- jk - 网易用户体验设计中心博客
不止一次,也不止一个人问过这个问题. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含”进程”和”服务”. ”进程”有正在运行的,也有刚刚离开在后台缓存的. ”服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离开应用程序.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.

Android应用程序需不需要手动退出? - 阿智的日志 - 网易博客

- Kenji Kee - azero.tsang.blog.163.com
不止一次,也不止一个人问过这个问题. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含“进程”和“服务”. “进程”有正在运行的,也有刚刚离开在后台缓存的. “服务”是一个无界面、长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使用返回键(←)逐步离开应用程序.

Android 一个应用程序调用另一个应用程序

- - CSDN博客推荐文章
实现行业应用调用我们可以Get到哪些技能. * Activity的singleTask的启动模式 * 界面跳转的基本实现 * 前台Service的基本介绍和实现 * SharedPreference的简单用法. 在XHL应用程序中去调用MPos应用程序,借助MPos的一些界面完成特殊的功能. (1)创建名为XHL的应用程序.

Eclipse开发Android应用程序入门

- Bingnan - 酷壳 - CoolShell.cn
原文出处:http://www.smashingmagazine.com/2010/10/25/get-started-developing-for-android-with-eclipse/. 如今的移动设备应用程序开发充满着让人振奋的东西. 功能强大的硬件支持,平板电脑,多样的软件平台(塞班 OS,iOS,WebOS,Windows Phone 7…),移动设备开发者前景充满了机会和挑战.

android应用程序线程的监控

- - CSDN博客推荐文章
所以就开始研究起来,经过半天的模式总用有点启发,下面就简单介绍一个简单的线程监控:. DDMS是一款Google* 提供的应用,可作为独立的工具运行,也可通过ADT Eclipse* 插件集成到Eclipse* 中. 它提供了强大的特性集合,能帮助您快速了解应用的运行状况. 线程更新DDMS中的线程监控和评测浏览对于管理大量线程的应用很有用.

10款在Google labs诞生的Android应用程序

- HUan - cnBeta.COM
Google研究部门的高级副总裁Bill Coughran通过Google博客表示公司将关闭Google labs,因为Google打算集中资源开发重点项目. Google计划先结束所有实验,然后着重开发那些已成形的产品. 这并不意味着Google停止了一切创新活动,Google员工依旧会花时间进行“宠物计划”(就是工程师每周有一天时间将自己最疯狂的想法付诸实践),同时也会继续开发新产品,但是会终止所有实验室项目.