2013-03-10 101 views
8

我在這裏有一個關於性能的常見問題,以及哪些應該執行哪些操作,哪些不應使用。 我實際上在我的應用程序中使用了兩項活動,讓我們稱之爲「theFirst」和「theSecond」活動。公共靜態變量或使用意圖類的putExtra方法

在第一個活動中,我有一個公共靜態對象,就我而言,它是由我製作的一個自定義對象的列表,名爲Conjunction。

當我調用第二個活動時,我想要獲取這個列表的內容。 所以我應該使用公共靜態變量?有什麼問題嗎?第一項活動只​​有一個實例是正確的?所以使用公共靜態變量沒有問題..?我猜。

或者我應該計算整個列表並將這些信息放在一個大字符串中,並使用putExtra方法將它發送給第二個活動?

在一個很好的解釋是非常好,我真的很感激它:)

+2

使用單例模式通常比公共靜態字段更好。 – 2013-03-10 13:02:58

回答

11

不推薦使用靜態變量。靜態變量存儲在堆的PermGen部分中。即使類完成它的工作,靜態變量仍然在堆中。垃圾收集器確實標記並掃描。如果第二個活動中引用的第一個活動中有靜態變量,則鏈接保持很長時間。如果你使用更多的靜態變量,你可能會得到內存泄漏。還減少使用不必要的物體。

靜態變量由ClassLoaders引用的Class對象引用-so除非ClassLoader以某種方式丟棄Class,或者ClassLoader本身有資格進行垃圾回收,否則靜態變量將不會被垃圾回收。因此,如果您正在使用許多類中引用的靜態變量,則除非這些類可用於垃圾回收,否則這些類和聲明靜態變量的類不能進行垃圾收集。所以這會導致堆內存擴展導致內存泄漏。

我推薦使用puExtra作爲基元類型。在你的情況下使用單身應該有所幫助。

在這個視頻中,這個傢伙談論了爲什麼不應該使用靜態變量以及如何避免內存泄漏。 http://www.youtube.com/watch?v=_CruQY55HOk。這個傢伙談論使用MAT分析器來檢查內存泄漏。

也看看這個鏈接。 http://developer.android.com/guide/faq/framework.html。查看標題下的詳細信息*如何在單個應用程序內的活動/服務之間傳遞數據?

+1

最後一個鏈接有非常好的信息,謝謝分享。我現在使用putExtra,我計算字符串,然後使用putExtra放置String,然後調用活動。我想它現在是一個很好的解決方案:) 感謝隊友;) – TiagoM 2013-03-10 13:30:14

+1

很高興它幫助你。 – Raghunandan 2013-03-10 13:31:10

1

公共靜態是不是一個好主意。在某些情況下,系統可能會終止「第一次」活動。通過:Activity Lifecycle可以幫助您瞭解活動的工作方式。

更好地使用putExtra並不是一個真正的字符串,而是可以查看putExtra的Parselable或Serializable對象。 see here for serializable

+0

Acitivy生命週期有很多很好的信息,我只是偷偷摸摸地看了一下,非常好,謝謝很多朋友;) 我正在使用putExtra。謝謝;) – TiagoM 2013-03-10 13:30:59

相關問題