2017-07-03 55 views
2

我正在構建一個Android應用程序,它有一個用於保存用戶配置文件信息的類User。當創建用戶時,它會保存在SharedPreferences文件中,以便我可以加載最後創建的用戶,然後下次啓動該應用程序。我還有一個Singleton類,它保存新創建的用戶的對象,以便其他類可以使用它。我這樣做是爲了避免每次更改Fragment並且需要用戶時都閱讀SharedPreferences文件。我的問題是:是否使用Singleton將整個應用程序的變量保存在內存中?它是爲此目的還是有另一種方法來保持面向對象編程原則?在Activity中創建變量而不是使用訪問器方法會更好嗎?Singleton是保持Android應用程序內存數據的最佳方式嗎?

回答

0

是的,這是更好的方法。最好在Singleton對象中保存數據(正如你提到的那樣),而不是每次都從共享首選項訪問。我們在應用程序中爲會話目的使用單身人士,這意味着只要應用程序正在運行變量數據將可以訪問。您可以在活動級別創建變量,但這將是非常糟糕的方法。簡而言之,你用於你目的的方法是最好的方法。

0

我會使用以下內容: 接口CurrentUser。 CurrentUser具有檢索和更新用戶的方法。用戶可以存儲在數據庫,偏好或混合。 我會在需要時使用Dagger注入CurrentUser。 CurrentUser實現本身應該是一個單例,因爲Dagger不保證singleton的特性。 如果您的CurrentUser具有RxJava流或LiveData等功能以保持觀察者處於最新狀態,則可獲得獎勵積分。

作爲Singleton的替代品,您可能希望使用保留的碎片來實現Fragment Holder模式,但在您的情況下,Singleton似乎更好。只要確保你使用的接口和注入不會影響可測試性,並保持組件分離。

+0

從我的理解本質上來說,這些信息被保存在一個Singleton類中,但是這樣的代碼更清晰和更模塊化? – D3bian0s

+0

是的,代碼更好。通過客戶端獲得單例的實例是不好的做法,但只要客戶端自己沒有得到它,單純的生命週期就沒有問題。 單身可能很難測試它們是否有狀態,所以考慮在每個測試中使用構造函數package-private並使用單例的新實例,並且您很好。 – charlag

相關問題