关于android组件的生命周期

时间:2012-11-15 03:15:47

标签: android service android-activity lifecycle

首先,我是android开发的新手...... 我已经阅读了android API指南中的一些文章,并对托管过程中的组件生命周期感到困惑。

以下是我的理解:

  1. 在低内存情况下,Android系统可能会杀死进程整个进程中的某些活动,这意味着启动的活动可能会死亡,但进程仍然存在。< / p>

  2. 如果服务已启动且未调用任何停止方法,则在极低内存中,此服务将被系统及其托管进程终止,而不仅仅是服务本身,这意味着情况不应该发生:服务被系统杀死,但托管过程仍然存在。

  3. 当应用启动时,用户导航activity1 - &gt; activity2 - &gt; activity3并且没有一个调用finish()。接下来,用户导航到另一个应用程序的活动并使用它,只要前一个应用程序进程被系统杀死。现在用户导航回后向跟踪堆栈中的activity3,会发生什么?之前的应用程序流程重新启动,仅 activity3重新创建?

  4. 有什么不对吗?

2 个答案:

答案 0 :(得分:2)

无需切换到其他应用的活动:从您离开第一个活动到第二个活动的那一刻;很可能第一个活动可能在你从第二个活动返回时被破坏(回溯),当你去第三个活动时,第一个活动可能是第一个,第二个或两个都可能是同时被摧毁。事实上,你甚至没有离开活动去看它被摧毁;因为如果您从纵向模式切换到横向模式,反之亦然,通过旋转设备,这将自动发生。

当您返回活动时,如果活动尚未被销毁,则将调用onRestart()函数。如果有的话,将调用“onCreate(Bundle savedInstanceState)”,但如果您已采取预防措施,则将参数“savedInstanceState”设置为非空值(即,它将指向有效的Bundle对象)当活动进入被系统销毁的过程时,“onSaveInstanteState(Bundle outState)”函数中活动的当前状态。系统将在销毁活动之前始终调用此功能,此时需要稍后恢复该活动以进行反向跟踪。当然,在调用finish()之后不会调用它,因为这也会从反向跟踪堆栈中删除活动。

最后,在Android中,同一应用程序中的活动之间的耦合非常松散。在资源使用方面,从同一应用程序或其他应用程序切换到活动之间没有太大区别。在许多方面,活动的行为就像在运行时所有完全独立的应用程序一样。这就是为什么你总是需要使用意图来开始一个活动;即使是来自同一个应用程序。

答案 1 :(得分:1)

基于我的理解......

  1. 在低内存情况下的android中,第一个活动将从调用onDestroy方法的内存中删除。

  2. 事实并非如此。这取决于服务是如何启动的,即是从onStart开始还是通过将服务与组件绑定。

  3. 一旦前一个应用程序进程被终止,那么当用户启动应用程序时,他将被带到活动1.在相同任务或不同任务中启动活动取决于所使用的启动模式(单个任务等)