0

我对 Android 还是很陌生,所以在协调 Activity 生命周期与我所知道的并且能够用作桌面应用程序开发人员时,我仍然存在问题。几周前我在这里写了一个问题,关于我正在尝试制作的一个非常简单的应用程序。我努力的结果并不完全是成功。当我旋转我的手机时,当前的活动被破坏并重新启动(正如我研究的文献所说的那样),这导致它重新初始化某些对象并且行为不正确,我无法在应用程序完成后终止它是什么应该的。

这个实验让我清楚地知道,我需要进一步教育自己如何使用活动进行编程。我花了一些时间寻找有关如何处理此活动问题的指南、技术和最佳实践。令我沮丧的是,我找不到任何简洁有用的东西。(相信我,我现在没有精力去阅读另一本 Android 书籍的封面。)我现在能取得进步的唯一方法就是实际编程。

所以我只是决定翼它。我的第一个想法是,如果无论应用程序状态如何,我的活动都被左右谋杀,我需要创建一些可以在后台运行的东西。我创建了一个控制器类,它本质上将运行节目、保持应用程序状态、运行计时器等等。活动将通过静态工厂方法在 OnCreate 中获得引用,如果您愿意,这应该确保它们始终具有正确的基本单例模式。然后活动将简单地显示来自控制器的数据并传递任何用户交互。

如果我对 Android 机制的理解是正确的,这应该可以工作。但这让我思考。如果一个 Activity 可以在任何时候被系统杀死以释放资源,那么一个不是 Activity 的类呢?我可以指望它在应用程序运行期间一直保持活动状态,还是它也可以在任何时间点被杀死?

无论如何,应用程序何时终止?我在我的应用程序的最后一个屏幕上放置了一个“退出”按钮,我试图告诉 Android“用户已请求应用程序结束,所以请终止它”。到目前为止,我还没有成功。我知道像 Sygic 之类的某些应用程序在你告诉它们时会退出(或者至少我假设这是基于应用程序的行为)但到目前为止我所阅读的所有内容似乎都建议我应该将 Home 活动调用到前面(或堆栈中我的应用程序活动之前的任何活动)并忘记它。我有时会在几天不使用我的应用程序后回到我的应用程序,并且它处于我上次离开它的状态。它一直在不必要地运行吗?我该如何预防?

我知道 Android 会根据需要终止活动,但它是否对整个应用程序执行相同的操作?什么构成应用程序的终止,以及如何以及何时发生?

4

2 回答 2

1

这里有很多,我会尝试解决你的一些问题,但我现在无法写出全面的回复。

我有时会在几天不使用我的应用程序后回到我的应用程序,并且它处于我上次离开它的状态。它一直在不必要地运行吗?我该如何预防?

它本身并没有运行(假设你没有以这样的方式创建它,它会持续不断地产生线程或其他东西)但是系统能够存储你的应用程序的“快照”,然后当您返回到它,如果该快照仍然存在,它将使用它来使您的应用程序的状态与您离开它时的状态相同。通常,您的应用程序在您不使用它的停机时间内不会“做事”(再次假设您没有告诉它)。

无论如何,应用程序何时终止?

终止在android上是一种模糊的概念。当用户没有在屏幕上直接与其交互时,应用程序将处于停止状态。它在“被摧毁”之前保持“停止”多长时间取决于许多因素。系统本质上将尽可能长时间地保持您的应用程序处于此停止状态,直到它绝对必须回收保持您的状态“快照”的内存资源。一旦它必须回收这些资源,它将破坏您的活动。下次启动您的 Activity 时,它将从头开始创建。但是,如果您的 Activity 在销毁之前启动(当它处于停止状态时),那么系统将使用其存储的“快照”,这意味着它将处于与用户上次离开它时相同的状态。

什么构成应用程序的终止,以及如何以及何时发生?

与 Activity 终止最接近的类比是它被销毁时。每当操作系统必须回收您的状态快照所消耗的资源时,操作系统就会执行此操作。

于 2013-08-30T23:36:09.423 回答
0

我也阅读了很多关于 Activity LifeCycle 的内容,据我了解,包括 Activity 和类等在内的整个应用程序都被杀死了。然而,当安卓系统为了释放资源而杀掉一个应用程序时,是在最极端的情况下。在这种情况下,您可以使用 onPause()、onStop() 和 onDestroy() 方法来保存数据。根据活动是否被最小化、隐藏或杀死等按该顺序调用。当活动被隐藏、暂停、停止、杀死等时,将始终调用 onPause()(据我所知)。在这些函数中保存您的数据或必需品,并在 onResume() 方法中恢复它们。希望有帮助。

于 2013-08-30T23:37:37.070 回答