1

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

以下是我的理解:

  1. Android系统可能会在内存不足的情况下杀死一个进程中的一些Activity整个进程,这意味着有可能一个启动的Activity可能会死掉,但进程仍然活着。

  2. 如果一个服务启动后没有调用任何停止方法,在内存极低的情况下,该服务被系统及其宿主进程杀死,而不仅仅是服务本身,意味着这种情况不应该发生:服务被系统杀死,而是宿主过程还活着。

  3. 当应用程序启动时,用户导航 activity1 -> activity2 -> activity3,并且没有一个调用 finish()。接下来,用户导航到另一个应用程序的活动并使用它很长时间,以至于前一个应用程序进程被系统杀死。现在用户导航回回溯堆栈中的activity3,会发生什么?前一个应用程序进程重新创建 activity3 重新启动?

哪里不对了 ?

4

2 回答 2

2

无需切换到另一个应用程序的Activity:从您离开第一个Activity的那一刻开始进入第二个Activity;很明显,当您从第二个活动(回溯)返回第一个活动时,第一个活动可能已被破坏,当您转到第三个活动时,第一个、第二个或两者都可能是同时被摧毁。事实上,你甚至不会让一个活动看到它被破坏;因为只要您通过旋转设备从纵向模式切换到横向模式,这将自动发生,反之亦然。

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

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

于 2012-11-15T05:36:04.367 回答
1

根据我的理解...

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

  2. 情况并非总是如此。这取决于服务的启动方式,即是从 onStart 启动还是通过将服务与组件绑定。

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

于 2012-11-15T03:29:12.273 回答