2011-07-13 43 views
2

我需要加載一些文件並將它們存儲在一個靜態變量中。android單例與靜態方法

加載和getter方法幾乎在每個Activity中都是必需的。

我要做出方法靜態的,但有些博客DIS-喜歡它。

這兩種方法的主要優點和缺點對我來說如下。

優點:能夠保持多態性。

缺點:必須調用在每一個活動getInstantace方法。

靜態方法是反之亦然。

請指導我在兩種或任何其他方法之間進行選擇。

任何幫助,將不勝感激。

回答

7

您可以找到「一些博主」誰非常不喜歡什麼。靜態方法沒有問題,只要他們操作的任何狀態都是/每個調用傳入的方法的本地方法(同樣的警告適用於單例中的實例方法)。

兩種方法都應該沒問題,只要選擇一個你喜歡的方法即可。作爲一般的經驗法則,如果您的單例實例不會在運行時持有可能可變的任何狀態,請使用靜態方法。否則,如果單例是爲了保持狀態,而不是僅僅作爲少數實用方法的存儲庫,那麼將它作爲單例。

唯一反對使用我所遇到的靜態方法半路合理的說法是,靜態方法是有問題的,以模擬出了單元測試的目的。但我的猜測是,你可能不是在做模擬單元測試,我認爲用模擬對象進行測試的價值通常被誇大了,當你看到它的價值相對於進行設置的工作量時測試用例。

1

我寧願使用單例。 靜態的一個缺點是它在應用程序啓動時總是存在,即使您不使用此對象,它也會從系統中花費一些內存。

+0

確定它在應用程序啓動時存在,而不僅僅是第一次使用該類時? –

+0

這沒有意義。他正在將一個文件加載到靜態變量中。只要文件沒有加載它不會花費內存...... –

+1

@Thomas:我不確定,AFAIK靜態變量將在類加載時初始化。但我不知道計時類加載,它取決於操作dalvilk虛擬機? – NguyenDat

2

正確的方法是使用依賴注入。有一個問題here討論你的替代品。

對於我單身和靜態方法實際上是一回事。無論如何,你的類和單例之間仍然存在緊密的耦合,單例實現使用靜態成員。我會說選擇最適合你的風格。

7

我會避免在Android中使用靜態變量,因爲如果您的應用程序暫停並且手機資源不足,則Android通常會清除類中的所有靜態數據,從而導致意外的空指針異常。在Google上搜索「Android Static Null」以獲得更好的解釋。無論哪種方式(靜態方法或Singletons),您都應該確保您的應用程序能夠保存狀態並在Android清除靜態變量的情況下將其恢復。

+1

這個答案,與android靜態null,只是讓我的一天。其中一個隱藏的大腦升級,你只是喜歡找到。 – Warpzit