一件事使我感到困惑。看来,如果我在Android上使用某些程序,然后按“主页”按钮,我会看到主屏幕,并且可以重新运行该程序,并看到该程序与以前的状态相同-看来该程序没有完全重启,只是暂停然后恢复。

但似乎与Air Control游戏并不一致。有时,当我在玩Air Control并按“ home”,然后重新运行Air Control时-它被暂停了(就像我按了“ pause”按钮一样),我可以继续游戏了。有时,同样的情况也会导致Air Control放弃游戏并重新开始。

所以,看来我听不懂。

这是怎么回事?按下“ home”按钮,程序会怎样?它会继续运行还是会做什么?

评论

我怀疑按下主屏幕按钮会导致更高的功耗。

#1 楼

按下主屏幕可将您从应用切换到主屏幕,同时使应用在后台运行。这有点像在Windows PC上的两个窗口之间切换。

不同之处在于,当手机的内存等资源不足时,它将开始关闭在后台运行的应用程序,以便手机有足够的资源来执行您现在要执行的操作。游戏通常是手机会“杀死”以节省资源的首批应用程序之一,因为它们通常比其他应用程序使用更多的内存和CPU。这就是为什么有时您的游戏仍处于暂停状态,而有时Android已为您关闭游戏的原因。
后退按钮是关闭应用程序的方式,以便它们实际上已关闭。

另请参阅在Android中关闭应用的正确方法是什么?

#2 楼

Android开发文档Tasks and Back Stack实际上很好地涵盖了这一点。相关摘录:


任务是一个内聚单元,当用户开始新任务或通过HOME转到主屏幕时,它可以移至“后台”键。在
背景下,任务中的所有活动都停止了,但是任务的
后退堆栈保持不变-该任务只是在执行另一个任务时就失去了焦点,如图所示然后,在图2中。一个任务可以
返回到“前景”,以便用户可以从他们离开的地方接起。
例如,假设当前任务(任务A)有三个
堆栈中的活动-当前活动下有两个。用户
按下HOME键,然后从
应用程序启动器启动新应用程序。当出现主屏幕时,任务A进入后台。新应用程序启动时,系统会使用自己的活动堆栈为该应用程序启动
任务(任务B)。
与该应用程序进行交互之后,用户再次返回Home
并选择最初启动任务A的应用程序。现在,任务
A成为前台-堆栈中的所有三个活动均保持不变
,堆栈顶部的活动恢复。此时,
用户还可以通过以下步骤切换回任务B:返回首页并选择启动该任务的应用程序图标(或触摸并按住
HOME键以显示最近的任务)并选择一个)。这是Android上多任务处理的一个示例。

注意:可以一次在后台保留多个任务。但是,
如果用户同时运行许多后台任务,则
系统可能会开始破坏后台活动以恢复内存,从而导致活动状态丢失。请参阅以下有关活动状态的部分。


摘要:当您按Home并将其坐在内存中时,任务将移至后台,实际上并没有执行任何操作并保持其状态。这意味着(通常而言)您可以切换回该任务,它将在中断的位置继续执行。但是,如果需要回收内存,Android系统可以并且将杀死后台任务。什么时候以及如果发生这种情况完全取决于系统,这可能就是为什么您在继续执行时看到不一致的行为。再次启动它。因此,除非应用程序作者采取措施在销毁过程中保存应用程序的状态,否则它将丢失(并且在游戏中保存确切的状态是非常不切实际的)。 )文档是涵盖活动生命周期的文档(向下滚动会有一个不错的流程图)。

评论


因此,它们是根据每个任务而不是每个活动/流程杀死的。后者将导致部分任务被杀死,这可能是不可取的。

– Jiggunjer
2016年9月9日下午6:10

#3 楼

按下Home键,允许用户通过显示启动器来启动新任务。所有活动任务(因此包括“空气控制”示例在内的活动)都将调用其onPause()方法。背面可见。当Activity处于后台时,Apps Process也有可能被杀死,但这不应影响用户体验。用户是否应该分辨出一个活动是刚刚被暂停还是被杀死。这可以解释Air Control的不同行为,这可能暗示了Android生命周期管理的错误实现。

评论


我认为“杀死”是指您停止而不是摧毁。我相信使用正常的Linux术语,当您杀死一个进程(例如Activity)时,您销毁了相应的应用程序组件。

– Jiggunjer
16 Sep 9'在6:18



不,我的意思是摧毁。

–流程
16年9月9日在7:11
当您按下Home键时,将调用onStop方法。被杀死的进程并不意味着该活动会调用其onDestroyed方法,尽管它确实很相似。 “杀死”活动进程意味着将VM从RAM中删除。对我而言(Android将其杀死)似乎可能会影响用户体验。

– Jiggunjer
2016年9月9日在7:43

#4 楼

我的声誉在这个网站上仍然太低而无法投票,所以我在回答emphaisze Flow的答案。我一直在我的一个应用程序中遇到此问题。我有各种微调器控件,您必须将它们的状态显式保存在onPause()中,然后将其状态恢复到onResume()中-Android不会自动记住它们的状态。

另一个麻烦之处是有时当您只希望应用程序的onCreate()函数调用onResume()时,Android就会调用它。行为要开发商纠正。大多数应用程序在市场中都有联系电子邮件。

顺便说一句,如果您想了解应用程序的生命周期,建议您参阅Ed Burnette的《 Hello Android》第2章,尤其是图2.3。

#5 楼

主页按钮在应用程序中时按下:

大多数应用程序将保存其状态(恢复状态时保持自身一致性所需的任何数据),并且设备将切换到启动器应用程序。

主屏幕按钮在主屏幕上时按下:

许多第三方启动器都可以配置此按钮。但是,其中许多默认情况下会带您回到“主”主屏幕(默认启动器会执行此操作)。

您的朋友可能关心的是:应用可能会占用大量内存,并导致多次写入磁盘来保存数据。这使用电池。但是,这通常不是导致设备电池耗尽的主要原因(操作系统已针对这些问题进行了优化)。

某些应用程序将继续作为后台应用程序运行,因此按下主屏幕按钮不会杀死它们(例如,在按下主屏幕按钮后Google Play音乐仍会播放)。

您的朋友可能会担心,按下主屏幕按钮后您没有退出该程序,因此该程序仍在运行。 Android会根据需要卸载这些应用程序。

您和您的朋友应该更加关注显示器-它消耗的电量最大。