2014-09-30 48 views
-1

有沒有一種方式,當一個活動開始時,用於識別應用程序是否已被殺死(例如由於內存不足),然後避免應用程序嘗試用它們的空構造函數加載它以前的片段?當應用程序已被殺死時,避免應用程序嘗試調用碎片的空構造函數

我需要使用非空構造函數的碎片,它們的參數不可序列化(當應用程序在後臺運行時,我不保存它們)。如果應用程序被殺害,我想自己重新創建它,並重新創建所有片段,就像應用程序第一次啓動一樣。

可能嗎?

+2

「我需要使用非空構造函數的碎片」 - 爲什麼?對不能放入'savedInstanceState' Bundle'的數據使用setter,將activity中的數據推送到activity的'onCreate()'中的片段中。或者,從片段的'onAttach()'或'onActivityCreated()'中從託管活動中提取數據。 – CommonsWare 2014-09-30 15:41:51

+0

太棒了!這是解決方案! – Massimo 2014-09-30 15:49:56

回答

0

我不知道有什麼辦法來阻止活動重新創建其片段。這並不是說沒有這樣的機制,但如果有這樣的機制,它不是常用的。

但是構造函數只是獲取數據到對象中的一種方法。如果你支持一個零參數的公共構造,因此Android可以重新創建你的片段,您可以:

  • 使用setter方法不能放進savedInstanceStateBundle數據,從活動的數據推入片段該活動的onCreate(),或

  • 拉離舉辦活動的數據onAttach()或片段的onActivityCreated(),或

  • 使用這個特殊的鉤子鉤住你的事件總線實現,如在奧托生產者Ø [R粘事件greenrobot的EventBus,或

  • 有片段重新創建數據本身(例如,打開一個新的套接字連接到服務器,以取代當進程被終止爲離去的插座)

也可能有其他模式,但這些應該可以幫助您爲支持零參數公共構造函數提供一些想法。