簡體   English   中英

android singleton 與 static 方法

[英]android singleton vs static methods

我需要加載一些文件並將它們存儲在 static 變量中。

幾乎每個 Activity 都需要 load 和 getter 方法。

我打算制作方法 static,但有些博主不喜歡它。

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

singleton

優點:能夠保持多態性。

缺點:必須在每個 Activity 中調用 getInstantace 方法。

static 方法反之亦然。

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

任何幫助,將不勝感激。

I would avoid using Static variables in Android, because Android often clears all Static data from your class if your app is paused and the phone is short on resources, leading to unexpected Null Pointer Exceptions. 在 Google 上搜索“Android Static Null”以獲得更好的解釋。

無論哪種方式(靜態方法或單例),您都應該確保您的應用程序能夠保存 state 並在 Android 清除您的 static 變量時恢復它。

你可以找到幾乎不喜歡任何東西的“一些博主”。 static 方法沒有任何問題,只要它們操作的任何 state 是方法的本地/每次調用都傳入(同樣的警告適用於單例上的實例方法)。

任何一種方法都應該沒問題,只需選擇您喜歡的方法即可。 As a general rule of thumb, go with static methods if your singleton instance would not be holding any state that is potentially mutable at runtime. 否則,如果 singleton 旨在保存 state 而不僅僅是作為少數實用方法的存儲庫,則將其設為 singleton。

我遇到的反對使用 static 方法的唯一合理的論點是 static 方法對於單元測試目的的模擬存在問題。 但我的猜測是您可能沒有進行模擬單元測試,而且我認為使用模擬對象進行測試的價值通常被誇大了,當您查看它相對於設置工作量的值時測試用例。

正確的方法是使用依賴注入。 這里有一個問題討論您的替代方案。

對我來說 singleton 和 static 方法實際上是一回事。 您的類與 singleton 和 singleton 實現之間仍然存在緊密耦合,無論如何都使用 static 成員。 我會說選擇最適合你風格的東西。

我更喜歡使用 singleton。 static 的一個缺點是它在應用程序啟動時始終存在,即使您沒有使用此 object,它也會從系統中花費一些 memory。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM