2013-05-17 41 views
1

我在程序中有幾個活動。可以說,活動A,B和C.如何在活動之間保留數據

活動A是在這種情況下的main activity。它包含對象X,必須可供所有其他活動(活動:B和C)訪問。

活動A將開始活動B,然後B將開始С.之後,活動A和B都在後臺,並且可以由操作系統爲killed。我應該如何將對象X傳遞給活動B和C,以確保當A & B被殺時對象X不會被殺死?

+0

您是否需要自定義對象或原始數據類型?如果後者是這種情況,可以使用SharedPreferences。 – Lennart

+0

用於自定義對象。 – Roman

回答

1

爲什麼你不能用SingleTon創建你的X對象?只要你願意,你可以保持它活着,你可以從任何你想要的地方得到相同的實例。

public class TestObject { 

private static TestObject testObjectInstance; 

/* put you data here */ 

    private TestObject() { 

    } 

    public TestObject getTestObjectInstance() { 

     if (testObjectInstance != null) { 

      return testObjectInstance; 

     } else { 

      testObjectInstance = new TestObject(); 
      return testObjectInstance; 
     } 
    } 

    public TestObject createNewTestObjectInstance() { 

     testObjectInstance = new TestObject(); 

     return testObjectInstance; 
    } 
} 
+0

謝謝。我不知道這個竅門。當testObjectInstance將被銷燬?就我所關心的而言,只有當這個過程被殺死時它纔會被殺死,不是嗎? – Roman

+0

看看這個StackOverFlow問題,它已經被討論過了。 [SOF問題](http://stackoverflow.com/questions/13891186/static-singleton-lifetime-in-android)。 正如在這裏已經討論過的,不要使用可能導致內存泄漏的活動實例的SingleTon。 – osayilgan

0

有三種可能的方式:在這裏提到的

其中兩個。

  1. Via SharedPreferences。但請記住,SharedPreferences在應用程序關閉時保留該值。如果您希望該值在您的應用程序中「永久」,這是最佳解決方案。

  2. 創建一個單例對象。如果您想要在所有活動中操作對象但不想將其保存爲其他運行,這是最佳解決方案。

  3. 通過附加功能發送數據。如果您只想要對象的VALUE並且不想操縱它,這是最好的解決方案。

0

嘗試IntentputExtra()功能只能使用它的原語。

如果X是隻包含原語,你可能會寫在X,public Intent fillIntentWithX(Intent intent)內搭意圖對象作爲參數的函數,並填寫在X原語的意圖對象,並返回意圖對象。

同樣,在X,public X getXFromIntent(Intent intent)中寫入另一個函數,它將意圖作爲參數,提取駐留在其中的基元以形成新的對象X並返回它。

  • 使用fillIntentWithX()來填充的意圖,這將啓動B,與 對象X的屬性。

  • 使用getXFromIntent()在 活動B中提取X,依此類推。

+0

謝謝,但我需要操縱一個複雜的對象,而不是原始的。所以要使用Extras,我必須實現Parcelable接口(我這麼認爲)。 – Roman