在Android手机中按下“主页”按钮时,正在运行的程序会如何处理?


27

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

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

看来我听不懂。

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


我怀疑按下“主页”按钮会导致更高的功耗。
流量

Answers:


12

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

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

Back按钮是关闭应用程序的方法,以便它们实际上已关闭。

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


26

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

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

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

简介:当您按下Home并坐在内存中时,任务将移至后台,实际上并没有执行任何操作并保持其状态。这意味着(通常来说)您可以切换回该任务,它将在中断的地方继续执行。但是,如果需要回收内存,Android系统可以并且将杀死后台任务。什么时候以及是否发生这种情况完全取决于系统,这可能就是为什么您在恢复时看到不一致的行为的原因。

如果任务被系统破坏,则必须在再次启动它时重新创建它。因此,除非应用程序作者采取措施在销毁过程中保存应用程序的状态,否则它将丢失(并且在游戏中保存确切的状态是非常不切实际的)。

另一个很好(但也很冗长)的文档是介绍活动生命周期的文档(如果向下滚动会有一个不错的流程图)。


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

4

按下Home键, 允许用户通过显示启动器来启动新任务。所有活动任务(因此包括“空气控制”示例在内的“活动”)都将调用其onPause()方法。

在返回可见状态时,应由应用程序(及其活动)恢复确切的先前状态。当Activity处于后台时,Apps Process也有可能被杀死,但这不会影响用户体验。用户是否应该分辨一个活动是刚刚被暂停还是被杀死。这可以解释Air Control的不同行为,这可能暗示了Android生命周期管理的错误实现。


我认为“杀死”是指停止而不是破坏。当您杀死某个进程(例如Activity)时,我相信通常的Linux术语就是您destroy()对应的应用程序组件。
jiggunjer

不,我的意思是摧毁。
流量

当您按下Home键时,onStop将调用该方法。被杀死的进程并不意味着该活动会onDestroyed调用其方法,尽管确实如此。“杀死”活动进程意味着将VM从RAM中删除。对我而言(Android将其杀死)似乎可能会影响用户体验。
jiggunjer

4

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

另一个复杂之处是,有时,当您只希望应用程序调用onResume()时,Android会调用该应用程序的onCreate()函数。

因此,您与Air Control(或任何其他应用程序)有关的问题是特定于该应用程序的,因此您应将此行为报告给开发人员以进行纠正。大多数应用在市场中都有联系电子邮件。

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


3

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

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

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

这可以由许多第三方启动器配置。但是,其中许多默认设置是将您带回到“主”主屏幕(默认启动器会执行此操作)。

您的朋友可能关心的是:

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.