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

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

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

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

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

  主页键:

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

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

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

  返回键:

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

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

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


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

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

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

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


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

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


  如上图,在目标网页想要返回上一个任务需要历经几番周折。

  一遍又一遍地回退浏览器的浏览历史,甚至还要回到浏览器的起始页,然后弹出一个对话框询问是否要退出……

  天哪!我快要疯掉了。

  Android官方对于多个任务间的活动堆栈处理机制,可以看下面这张图来解释:


  (配图出处: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、米聊……

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

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

  文章来源:azero.tsang.blog.163.com 转载请注明出处链接。

时间: 2024-11-02 13:39:31

Android应用程序需不需要手动退出?的相关文章

移动设备交互设计:Android应用程序不需要手动退出

文章描述:Android应用程序需不需要手动退出? 不止一次,也不止一个人问过这个问题.我都回答了:不需要.但是,还是要记录下来. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含"进程"和"服务"."进程"有正在运行的,也有刚刚离开在后台缓存的."服务"是一个无界面.长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使

广告-在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序

问题描述 在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序 大家好,我现在遇到这样的情况,我目前做的是一个android积分墙的项目,用户通过我的这个项目app做任务下载一个广告,当用户进入到我们的下载广告的apk 后,玩了一段时间后(玩了一段时间才会给积分),点击后退,当前的 广告apk 是退出了,同时我们的项目也退出了(原本我们的项目逻辑是不会退出的),回到了桌面......我们自己测试的时候并没有出现这样的情况,但是用户遇到了,并且用户反馈再次重启手机的时候,再

《Android安全技术揭秘与防范》——第2.1节Android应用程序概览

2.1 Android应用程序概览 Android开发秘籍(第2版) Android应用程序包含的功能五花八门,比如编辑文本.播放音乐.启动闹钟或是打开通讯录等.这些功能可以被分类对应到4类Android组件之中,如表2-1所示,每一类都对应一个Java基本类. 每个应用程序都由一个或多个这样的组件组成.当要用到某个组件时,Android操作系统就会将其初始化.其他应用程序在指定的权限内也可以使用它们. 随着在操作系统中展现多种功能(有些功能甚至与预期的应用程序无关,如呼入电话),每个组件经历了

Android客户端程序Gradle如何打包_Android

一.前言 android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式(手动修改参数打包)已经不满足需求,所以引入最近比较流行的gradle打包技术. gradle基于groovy语言,引入的原因也方便了以后从现在使用的eclipse开发环境迁移到Android Studio,所以blablabla--,不多说了,先上干货. 二.准备工作 1.首先,如果使用eclipse作为开发环境,需右键点击项目,在菜单中选择"Export-"

android 应用程序开发中,清除缓存的功能怎么做啊?

问题描述 android 应用程序开发中,清除缓存的功能怎么做啊? android 应用程序开发中,清除缓存的功能怎么做啊?清除此应用程序的缓存,怎么做? 解决方案 getCacheDir()能够得到当前项目的缓存地址 在项目中经常会使用到WebView 控件,当加载html 页面时,会在/data/data/应用package 目录下生成database与cache 两个文件夹.请求的url 记录是保存在WebViewCache.db,而url 的内容是保存在WebViewCache 文件夹下

面向Android应用程序的基于Parse云的服务

Parse 移动 SDK 为 iOS.Android 和 Windows 应用程序提供了基于云的 API 和服务.Parse SDK 还提供 了 JavaScript 和 REST API.使用 Parse API,您可以极快地以最少工作量让您的移动应用程序支持云处理 .集成了 Parse API 的移动应用程序可以轻松地在 Parse 云上存储数据对象和文件,发送并侦听推送通知, 管理用户,处理地理位置数据,并使用 Twitter 和 Facebook 等社交媒体平台.对于需要扩展的移动应用程

Android应用程序项目结构

用Eclipse打开Android应用程序的项目可以看到如下图所示的文件结构. src文件夹保存的是我们编写的java源文件,我们编写的源代码一般都放在这个文件夹内.比如HelloAndroid.java这个文件就是我们编写的代码文件. 01.package org.leo.android;02.03.import android.app.Activity;04.import android.graphics.Color;05.import android.os.Bundle;06.import

Android应用程序签名详解

1.什么是签名? 如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都 知道签名的含义.可往往就是将一些生活中常用的术语放在计算机这种专业领域,大家就开始迷惑了.计算机 所做的事情,或者说编程语言所做的事情,不正是在尽可能地模拟现实吗?所以,计算机中所说的签名和生活 中所说的签名在本质上是一样的,它所起到的作用也是一致的! 让我们来看看,在现实生活中的签名.比 如下面这张图片: 这是女星孙俪的签名.签名就意味 着在纸上或别处写下自己的名字,或者说在某处打上一个标记作

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.5节Android应用程序运行的机制

1.5 Android应用程序运行的机制 Android 3D游戏开发技术宝典--OpenGL ES 2.0 上一节介绍了如何搭建Android开发环境.如何开发Hello Android应用程序以及Android应用程序的调试,接下来在本节中将简要地介绍Android应用程序的运行机制. 1.5.1 应用程序的系统架构 Android平台由应用程序.应用程序框架.Android运行时.系统库以及底层Linux内核构成,详细结构如图1-54所示. 说明 应用程序层里面包含的就是需要读者去发挥创意