比方說,我們開發一個網絡授權的應用程序。我們需要一些「全局」服務來確定用戶是否登錄。如果用戶登錄,服務必須向身份用戶提供一些數據(例如cookie,授權令牌等),否則服務必須有設置這些數據的方法。在Android上使用全局數據的推薦方式是什麼?
有幾種方法可以做到這一點。我們可以使用靜態上下文(單例或靜態字段)來存儲這些數據。我們也可以創建一些服務來獲取所有這些數據。
但是Google推薦什麼方式?什麼方式是思想正確的?也許還有其他的方法來實現呢?
比方說,我們開發一個網絡授權的應用程序。我們需要一些「全局」服務來確定用戶是否登錄。如果用戶登錄,服務必須向身份用戶提供一些數據(例如cookie,授權令牌等),否則服務必須有設置這些數據的方法。在Android上使用全局數據的推薦方式是什麼?
有幾種方法可以做到這一點。我們可以使用靜態上下文(單例或靜態字段)來存儲這些數據。我們也可以創建一些服務來獲取所有這些數據。
但是Google推薦什麼方式?什麼方式是思想正確的?也許還有其他的方法來實現呢?
創建描述您的應用程序模型的管理器(單例模式)。是的,請確保它不包含活動,服務等的上下文。如果需要上下文,請務必致電getApplicationContext()。
Singelton是這樣做(+設計模式),最簡單的方法
但不時,有可能是使用singeltons問題:如果應用程序進程被殺掉,如果你離開應用程序,這將幾乎無疑發生在後臺太長,你的單身將被重新創建,所以你的私人詮釋數據將被重置爲默認值。
也許如果你不想使用太多的共享數據,你可以使用sharedpreferences來避免這種情況。
否則您可以嘗試擴展應用程序類。
希望幫助
不知道什麼是由谷歌推薦,但如果你需要的是生活的對象,只要你的應用程序生命那麼這將是Application
對象。
所以繼承自己MyApplication
extends Application
,確定你有需要的任何字段,然後通過(MyApplication)getApplication()
這只是另一種單身人士,這是懶惰的方式。我試圖避免使用全局變量,我正在尋找新的設計模式。 – bvitaliyg 2014-10-31 20:48:10
沒有新的設計模式。這是你已經存在的單身人士。 – 2014-10-31 20:56:15
我現在使用這種方式宣告
MyApplication
在清單和訪問,但是這是最簡單的方法。我試圖避免使用全局變量,我正在尋找新的設計(Android規範)模式。 例如,服務 - 但服務綁定創建一些開銷,以在每個屏幕上使用它。 – bvitaliyg 2014-10-31 20:51:53我在谷歌IO 2014年,我問如何跨應用程序的組件共享數據的問題。 Android團隊說singleton很好,他們在整個框架內部完成。所以我不明白爲什麼不,因爲它簡單而乾淨。 – 2014-10-31 20:57:32
傷心,但是是真的。我希望這是另一種選擇(某種AOP或跨領域關注),但如果Google員工使用單身,我會投降。 – bvitaliyg 2014-10-31 21:19:52