2012-01-05 42 views
1

嘿,我正在做一個測驗應用程序,我需要從一個活動向另一個活動傳遞多達100個「問題」對象的ArrayList。 Question對象有大約6個參數 - 所有非常小的字符串。我正在尋找方法來做到這一點,其中一個提到的是在一個類中聲明它爲公共靜態變量,然後在另一個類中引用它。我想知道以下幾點:Android中的大型公共靜態變量

  • 我需要「實例化」ArrayList之前,我可以使用它或我可以只聲明變量?如:

    ArrayList<Question> QuestionBank = new ArrayList<Question>(); 
    

    ArrayList<Question> QuestionBank; 
    
  • 如果我聲明瞭一個活動這個變量,它是如何留下可用的,當我在其他活動我?它宣佈的活動是否繼續運行?

  • 這是一個非常消耗內存的方法嗎?有沒有更高效但相對簡單的方法?
  • 如果我在完成使用後聲明變量null,它將釋放以前使用的所有空間嗎?
+6

您的聲明都不是有效的 - 您還沒有指定名稱... – 2012-01-05 19:33:08

+0

哦不!對不起忘了指定名稱 - 我在編寫自定義數組列表時總是犯這個錯誤... – user1058210 2012-01-05 20:53:05

回答

4

答案:

  1. 您需要實例之前,您如果 「使用」。 「使用」我的意思是調用方法。無論你在哪裏實例化它,第一或第二個活動。

  2. 靜態字段也稱爲類字段,因爲它們可以通過類訪問,而不是通過對象實例訪問。結果是,對於靜態字段,總是隻有一個實例,例如MyClass.someField可用於整個應用程序,只有一個。

  3. 它使用內存(RAM)而不是文件中的數據(使用閃存)。但是,在某些時候你需要將它放在內存中,所以無論如何它都會使用這個內存。

  4. 是的,如果你只是暫時需要它,你可以在不再需要它的時候將字段設置爲null並且內存將被釋放(最終,當gc運行時)。

順便說一句,有幾個選項來共享應用程序:活動之間

  1. 通行證裏面的數據資料通過Intent.setExtra()/Intent.getXXXExtra()
  2. 一類的靜態變量
  3. 通過一個名爲Application類,這是單實例,並在整個應用程序生命週期中保持活力
  4. Shared preferences
  5. Database
  6. Internal storage
+0

感謝這樣一個完整的答案彼得 - 正是我所希望的! – user1058210 2012-01-05 20:57:33

0

你想從一個活動到另一個讀取靜態數據,我不認爲,這是一個解決方案,無疑會導致問題/副作用。儘可能保持活動儘可能分離更好。

我相信最好的解決方案(如上面提供的)是讓你的QuestionsParcable。然後在活動Intent.setExtra方法中設置數據。當您的其他活動開始時,您可以閱讀Intent中的問題,然後您的所有數據都可以很好地適應活動的生命週期,並且您的活動可以以這種方式更加可重用。