这最终将解决您的问题,但是我首先想解决您在撰写本文时已经给出的各种答案的各种评论中提出的一些问题。我无意改变您的想法-相反,这些是供将来阅读此帖子的其他人使用的。
关键是我不能允许Android确定何时终止我的应用程序。那必须是用户的选择。
数以百万计的人对环境根据需要关闭应用程序的模型感到非常满意。这些用户根本不考虑“终止” Android应用程序,只考虑他们不打算“终止”网页或“终止”恒温器。
iPhone用户的使用方式大致相同,因为按下iPhone按钮并不一定像终止该应用程序那样“感觉”,因为许多iPhone应用程序在用户离开的地方接管,即使该应用程序确实关闭了(因为仅iPhone)目前一次允许一个第三方应用)。
就像我上面说的,我的应用程序中发生了很多事情(将数据推送到设备上,列出了始终应该存在的任务,等等)。
我不知道“列出应该始终存在的任务”是什么意思,但是“将数据推送到设备上”是一种令人愉快的小说,无论如何都不应该由活动来完成。使用预定任务(通过AlarmManager
)来更新您的数据,以实现最大的可靠性。
我们的用户登录后不能每次都接到电话就这样做,而Android决定终止该应用程序。
有很多iPhone和Android应用程序都可以解决这个问题。通常是因为它们保留登录凭据,而不是强迫用户每次手动登录。
例如,我们要在退出应用程序时检查更新
在任何操作系统上,这都是一个错误。据您所知,您的应用程序“退出”的原因是因为操作系统正在关闭,然后您的更新过程中途会失败。通常,这不是一件好事。要么在启动时检查更新,要么完全异步地检查更新(例如,通过计划的任务),而从不退出。
一些评论表明,单击“后退”按钮根本不会杀死该应用程序(请参阅上面我的问题的链接)。
按下“返回”按钮不会“杀死应用程序”。当用户按下“返回”按钮时,它将完成屏幕上的活动。
仅当用户想要终止它时才终止它-决不能以其他方式终止。如果您无法编写与Android一样的应用程序,那么我认为Android不能用于编写真实的应用程序=(
然后,Web应用程序也不能。或WebOS,如果我正确理解了他们的模型(还没有机会玩过)。在所有这些情况下,用户都不会“终止”任何东西-他们只是离开。iPhone有点不同,它目前仅允许一次运行一次(有一些例外情况),因此离开的行为意味着该应用程序将立即终止。
我有办法真正退出该应用程序吗?
正如其他人告诉您的那样,用户(通过BACK)或您的代码(通过finish()
)可以关闭您当前正在运行的活动。用户通常不需要其他任何东西,对于编写正确的应用程序,只需要使用“退出”选项即可使用Web应用程序。
根据定义,没有两个应用程序环境是相同的。这意味着您可以看到随着新环境的出现和其他环境被掩埋而引起的环境趋势。
例如,试图消除“文件”概念的运动正在发展。大多数Web应用程序都不强迫用户考虑文件。iPhone应用程序通常不会强迫用户考虑文件。Android应用程序通常不会强迫用户考虑文件。等等。
类似地,试图消除“终止”应用程序的想法的运动也越来越多。大多数Web应用程序并不强迫用户注销,而是在一段时间不活动之后隐式注销用户。与Android相同,在较小程度上与iPhone(可能还有WebOS)相同。
这就需要更加强调应用程序设计,关注业务目标,而不是坚持与先前的应用程序环境绑定的实现模型。缺乏时间或意愿去做的开发人员会因新环境破坏了他们现有的思维模式而感到沮丧。这不是这两种环境的错,更不是因为山峰绕过而不是通过风暴而造成的故障。
例如,某些开发环境(例如Hypercard和Smalltalk)将应用程序和开发工具混合在一个设置中。这个概念没赶上了,到应用程序语言扩展的外部(例如,VBA在Excel中,Lisp语言在AutoCAD)。因此,想出了心理模型的开发人员以为应用程序本身已存在开发工具,因此他们要么必须更改其模型,要么将自己限制在能够满足其模型要求的环境中。
因此,当您编写:
与我发现的其他混乱情况一样,我认为开发针对Android的应用程序不会发生。
目前看来,这对您来说是最好的。同样,我建议您不要尝试将应用程序移植到Web上,因为您在Android应用程序中发现的一些相同问题也将在Web应用程序中发现(例如,没有“终止”)。相反,或者相反,有一天,如果您确实将应用程序移植到Web上,则可能会发现Web应用程序的流程可能更适合Android,并且您可以在那时重新访问Android端口。