继续尝试学习 Android,我刚刚阅读了以下内容:
问题: 用户是否可以选择终止应用程序,除非我们在其中添加一个菜单选项来终止它? 如果不存在这样的选项,用户如何终止应用程序? 回答:(Romain Guy): 用户没有,系统会自动处理。 这就是活动生命周期(尤其是 onPause/onStop/onDestroy)的用途。无论您做什么,都不要放置“退出”或“退出”应用程序按钮。它对 Android 的应用程序模型毫无用处。这也与核心应用程序的工作方式相反。
问题: 用户是否可以选择终止应用程序,除非我们在其中添加一个菜单选项来终止它? 如果不存在这样的选项,用户如何终止应用程序?
回答:(Romain Guy): 用户没有,系统会自动处理。 这就是活动生命周期(尤其是 onPause/onStop/onDestroy)的用途。无论您做什么,都不要放置“退出”或“退出”应用程序按钮。它对 Android 的应用程序模型毫无用处。这也与核心应用程序的工作方式相反。
呵呵,我在 Android 世界的每一步都会遇到一些问题 =(
显然,您不能退出 Android 中的应用程序(但 Android 系统可以在任何时候完全摧毁您的应用程序)。那是怎么回事?我开始认为编写一个作为“普通应用程序”运行的应用程序是不可能的——用户可以在他/她决定这样做时退出应用程序。这不是应该依赖操作系统来做的事情。
我尝试创建的应用程序不是 Android Market 的应用程序。它不是一个供大众“广泛使用”的应用程序,它是一个商业应用程序,将用于非常狭窄的商业领域。
实际上,我非常期待为 Android 平台进行开发,因为它解决了 Windows Mobile 和 .NET 中存在的许多问题。然而,上周对我来说有点令人失望......我希望我不必放弃 Android,但它现在看起来不太好 =(
有没有办法让我 真正 退出应用程序?
这最终会解决您的问题,但我首先想解决您在对撰写本文时已经给出的各种答案的各种评论中提出的一些问题。我无意改变你的想法——相反,这些是为将来阅读这篇文章的其他人准备的。
关键是我不能让 Android 确定我的应用程序何时终止。那一定是用户的选择。
数百万人对环境根据需要关闭应用程序的模型非常满意。这些用户根本不会考虑“终止”Android 应用程序,就像他们考虑“终止”网页或“终止”恒温器一样。
iPhone 用户的情况大致相同,因为按下 iPhone 按钮并不一定“感觉”像应用程序被终止,因为许多 iPhone 应用程序从用户停止的地方继续,即使应用程序真的被关闭(因为 iPhone 只允许目前一次一个第三方应用程序)。
正如我上面所说,我的应用程序中发生了很多事情(数据被推送到设备,包含应该始终存在的任务的列表等)。
我不知道“总是应该存在的任务列表”是什么意思,但是“数据被推送到设备”是一个令人愉快的虚构,无论如何都不应该通过活动来完成。使用计划任务(通过AlarmManager)更新您的数据以获得最大的可靠性。
AlarmManager
我们的用户在每次接到电话并且 Android 决定终止该应用程序时都无法登录。
有许多 iPhone 和 Android 应用程序可以处理这个问题。通常,这是因为他们持有登录凭据,而不是每次都强制用户手动登录。
例如,我们想在退出应用程序时检查更新
这在任何操作系统上都是错误的。如您所知,您的应用程序“退出”的原因是操作系统正在关闭,然后您的更新过程将在中途失败。一般来说,这不是一件好事。要么在开始时检查更新,要么完全异步地检查更新(例如,通过计划任务),从不退出。
一些评论表明,点击后退按钮根本不会杀死应用程序(请参阅上面我的问题中的链接)。
按 BACK 按钮不会“杀死应用程序”。当用户按下 BACK 按钮时,它会完成屏幕上的活动。
它应该只在用户想要终止它时终止 - 永远不要以任何其他方式。如果你不能在 Android 中写出类似行为的应用程序,那么我认为 Android 不能用于编写真正的应用程序 =(
那么 Web 应用程序也不能。或者WebOS,如果我正确理解他们的模型(还没有机会玩一个)。在所有这些中,用户不会“终止”任何事情——他们只是离开。iPhone 有点不同,因为它目前只允许一次运行一件事(除了少数例外),因此离开的行为意味着应用程序会立即终止。
有没有办法让我真正退出应用程序?
正如其他人告诉您的那样,用户(通过 BACK)或您的代码(通过finish())可以关闭您当前运行的活动。对于正确编写的应用程序,用户通常不需要其他任何东西,就像他们使用 Web 应用程序需要“退出”选项一样。
finish()
根据定义,没有两个应用程序环境是相同的。这意味着随着新环境的出现和其他环境的消失,您可以看到环境中的趋势。
例如,越来越多的运动试图消除“文件”的概念。大多数 Web 应用程序不会强迫用户考虑文件。iPhone 应用程序通常不会强迫用户考虑文件。Android 应用程序通常不会强迫用户考虑文件。等等。
同样,有越来越多的运动试图消除“终止”应用程序的概念。大多数 Web 应用程序不会强制用户注销,而是在一段时间不活动后隐式注销用户。Android 也是如此,在较小程度上还有 iPhone(可能还有 WebOS)。
这需要更多地强调应用程序设计,专注于业务目标,而不是坚持与以前的应用程序环境绑定的实现模型。缺乏时间或意愿的开发人员会对打破现有思维模式的新环境感到沮丧。这不是任何一个环境的错,正如一座山的错,风暴在它周围流动而不是穿过它。
例如,一些开发环境,如Hypercard和 Smalltalk,将应用程序和开发工具混合在一个设置中。除了应用程序的语言扩展(例如, Excel中的VBA、AutoCAD 中的 Lisp )之外,这个概念并没有流行起来。因此,想出假设应用程序本身存在开发工具的心智模型的开发人员要么不得不改变他们的模型,要么将自己限制在他们的模型适用的环境中。
所以,当你写:
除了我发现的其他混乱的事情外,我认为开发我们的 Android 应用程序是不会发生的。
这似乎是最好的,对你来说,就目前而言。同样,我建议您不要尝试将您的应用程序移植到 Web,因为您在 Android 上报告的一些相同问题也会在 Web 应用程序中发现(例如,没有“终止”)。或者反过来说,如果你 确实 将应用程序移植到 Web 上,你可能会发现 Web 应用程序的流程可能更适合 Android,那时你可以重新访问 Android 移植。