2012-03-26 121 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