Android的Activity生命周期如何与整个应用程序相关?

时间:2010-10-20 22:34:13

标签: android android-activity lifecycle

这似乎没有很好的记录或我错过了,所以在我运行一堆自己的测试之前,我想知道是否有人已经知道其中一些问题的答案。

首先,当我说“应用程序”时,我指的是扩展Application类。 http://developer.android.com/reference/android/app/Application.html

我的问题如下,其中一些是相关的。

  1. 当用户从应用程序中离开活动并转到另一个应用程序的活动时,即使它没有onPause(),应用程序也会以某种方式暂停?或者,在它的所有活动都被销毁之前,它是否继续不受影响?

  2. 应用程序什么时候停止?什么时候所有的活动都被销毁了?

  3. 是否有可能在没有应用程序实例的情况下运行其中一个应用程序活动,或者如果有其中一个活动,应用程序类是否总是存在?

  4. 如果应用程序上正在运行某个进程,并且其活动全部暂停,该进程是否会继续运行?

  5. 应用程序是以任何方式通过轮换实现还是轮换只会更改活动?

  6. 由于

4 个答案:

答案 0 :(得分:7)

  1. 正如您所说,应用程序没有onPause,因此应用程序没有任何反应。当在你的Activity中调用onPause时没有什么特别的事情发生,你的Activity继续运行并且可以做任何想做的事情,包括运行新线程,定时器可以关闭等等。

  2. 我相信你要问的是:什么时候销毁一个应用程序,什么时候应用程序中的onTerminate方法被调用?答案很难确定并且取决于系统,当所有活动都被调用onDestroyed时,它不一定会发生。事实上,即使调用onDestroy,您的活动也不一定是垃圾回收。当系统内存不足时,您的应用程序所在的进程可能会被终止,这意味着您的应用程序将消失; onTerminate可能会或可能不会被调用。那时所有的活动,服务等也都被杀死了。

  3. 应用程序始终首先实例化,一个Activity必须具有关联的应用程序,就像您在AndroidManifest.xml中定义它一样。

  4. 进程永远不会在Android中暂停,onPause方法实际上并没有真正做任何事情,只是告诉你暂停应用中的事情。除此之外,进程一直在消失,你的线程继续运行,甚至主线程也会收到带有BroadcastReceiver的Intents。

  5. Application在应用程序的onConfigurationChanged()中获取旋转回调。我不确定您是否可以禁用它,因为AndroidManifest.xml中的应用程序标签不支持configChanges属性。

  6. 与Application的一个很好的比较是你的任何类中的静态字段。只要应用程序没有销毁过程,静态字段就会存在。所有活动,服务等都可以访问静态字段(假设静态字段是公共的),就像您的应用程序一样。

    祝你好运! 雅各布

答案 1 :(得分:2)

理解这一点的最简单方法就是忘记应用程序存在。应用程序与应用程序生命周期无关。它只是一个过程的全局,对某些事情有用,但对任何事情都不需要。关于应用程序如何运行的一切都围绕在其.apk中声明的Activity,BroadcastReceiver,Service和ContentProvider组件。

答案 2 :(得分:2)

在销毁上一个活动后,应用程序的实例可以继续存在。即使所有活动都没有了(即所有活动都调用了onDestroy方法),Application实例仍然可以存在。

此应用程序实例可以“重复使用”,您可能认为这是您应用程序的两次单独运行。

答案 3 :(得分:0)

这里都详细解释了这一点:http://developer.android.com/reference/android/app/Activity.html。如果你仔细阅读,你应该了解一切。

真实快速:

  1. 每个活动都有一个onPause。您可以选择不覆盖它,但它仍会被调用。一旦你离开,就会调用onPause。

  2. 定义“停止”。定义“应用程序”。这个过程可能永远存在,但它只是睡觉并等到其中一个活动开始。

  3. 如果没有实例化,活动就不可能存在。

  4. 每个执行的代码都在一个进程中运行,因此应用程序始终有一个进程。切换到其他应用程序后,该过程将继续存在,但它将处于睡眠状态。如果系统资源不足,Android可以随时终止进程。

  5. 每次旋转屏幕时,您的活动都将被销毁并重新创建,除非您专门禁用它。