2012-03-26 122 views
1

我在我的应用程序中开展了一系列活动,活动“A”,后面跟着“B”,“C”,“D”和“E”。活动“A”,“B”,“C”和“D”是透明活动(透明主题),而“E”是不透明的。让活动保持活力

要求是活动“A”不应该完成。我通过博客http://www.skill-guru.com/blog/2011/01/13/android-activity-life-cycle/其中指出

  1. 如果活动已失去焦点,但仍清晰可见(即新 非全尺寸或透明的活动已经专注于你的 活动的顶部)读取,它暂停。
  2. 如果一项活动被其他活动完全遮蔽,则停止 。

活动“A”的onStop()直到用户浏览到活动“D”才会调用,但是当调用活动“E”时会调用它。

有没有办法让活动“A”在Activity堆栈中运行?在应用程序对象中保留活动的静态引用是否是一个很好的解决方案,以便框架不会杀死它?我可以采取哪些预防措施以便“A”不会被杀死?有没有办法让我可以得到通知,如果这被框架杀死,以便我可以重新创建它?

回答

4

要求是活动“A”不应该完成。

活动通过致电finish()完成。这通常发生在用户按下BACK按钮时。

在用户浏览到活动“D”之前,不会调用活动“A”的onStop(),但在调用活动“E”时会调用它。

正确。

有没有办法让活动“A”在Activity堆栈中运行?

处于活动堆栈(为“跑”的任何合理的定义)“跑”,直到当调用finish(),用户按下BACK,或者过程终止。 onStop()对此没有影响。

这是一个很好的解决方案,将Activity的静态引用保留在Application对象中,以便框架不会杀死它?

不,因为它不会帮助。该活动将保留在内存中,直到您拨打finish(),用户按下BACK,或该过程终止。

我可以采取哪些预防措施以免“A”死亡?

不要打电话finish()

有没有一种方法,我可以得到一个通知,如果这被框架杀死,我可以重新创建它?

如果您的活动完成,将使用onDestroy()调用您的活动。如果进程终止,这可能会也可能不会发生,这取决于当时触发终止和系统状态的原因。

+0

谢谢@马克墨菲。这回答了一切。 – 2012-03-26 20:18:01