2017-08-27 26 views
0

我想將我的數據庫連接對象添加到Application類。我閱讀了一些教程,並在任何地方看到明確實現了單例模式。這樣Android:擴展應用程序類。爲什麼我們需要實現單身模式?

public class MyApplication extends Application { 
    private static MyApplication singleton; 

    public static MyApplication getInstance(){ 
     return singleton; 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     singleton = this; 
    } 
} 

我的問題是什麼,爲什麼我需要做的明確的實施?沒人解釋。

我想添加一些屬性,在onCreate()中初始化並獲得它在活動中的價值。

myProp = (MyApplication)getApplicationContext().getMyProperty() 

是否真的需要實現單例模式?

+0

因爲有一次,您只希望應用程序的一個實例正在運行。 –

回答

3

Application類是接入點到應用程序上下文,通常它用作所有應用程序範圍的依賴項(如數據庫對象)的初始化程序。此類僅在每個應用程序和存在時才初始化爲,直到應用程序在內存中。所以它是一個本地創建的單身人士。

通過對應用程序擁有這樣的靜態訪問點,您可以訪問任何類中的應用程序上下文,並且在一般情況下,當您在自定義類中需要此類依賴項時,此上下文對於檢索資源,系統服務等更好,因爲它沒有鏈接到活動和視圖,所以是一個防漏。當然,在您的示例中,Activity可以訪問應用程序,但是您有無論如何都會投射上下文,並且更好地在整個應用程序中使用相同的方法。

儘管你可以使用它像一個全球接入點所有應用程序作用域和初始化的依賴,不與巨大的初始化邏輯重載它,更好地創造一些其他單身用於此目的,並從Application類只是初始化。在一個大項目中考慮使用DI框架,Dagger是最好的一個,用於提供依賴關係。

3

默認情況下,應用程序類是singleton ..你沒有被允許自己創建應用程序.Android系統會在第一次將應用程序加載到內存中時創建此應用程序。在這裏使用singleton模式只是爲了獲得Application對象在應用程序中的任何地方

相關問題