2017-09-24 107 views
1

在過去,我已將子類Application維護爲應用程序的活動數據庫連接。但是,根據this SO answerApplication在UI線程中運行,這讓我覺得我絕對不應該用它來訪問數據庫。此外,根據Xamarin Application docs(以及那些Android本身):如何避免繼承Android.App.Application

通常不需要繼承應用程序。在大多數情況下,靜態單例可以以更模塊化的方式提供相同的功能。如果您的單身人士需要一個全局上下文(例如註冊廣播接收者),那麼檢索它的函數可以給出Context,它在第一次構建單身時內部使用Context.ApplicationContext

我想我明白了Context要的東西我可以用它來保持某種靜態訪問應用程序資源,但也有在文檔中沒有例子,我以前沒遇到過這種情況。任何人都可以解釋上述說明,並說明他們如何使用Context來維護應用程序資源(除非我完全忽略了這一點)?鏈接或直接示例將不勝感激。

回答

-1

我相信我找到了我正在尋找的機器人答案。

戴維·史密斯提供作爲文檔中引用的「靜態單」的simple example上面指出:

public class CustomManager { 
    private static CustomManager sInstance; 

    public static CustomManager getInstance(Context context) { 
     if (sInstance == null) { 
      //Always pass in the Application Context 
      sInstance = new CustomManager(context.getApplicationContext()); 
     } 

     return sInstance; 
    } 

    private Context mContext; 

    private CustomManager(Context context) { 
     mContext = context; 
    } 
} 

Context本身不會有助於CustomManager的壽命 - 僅僅是因爲它的存在一個靜態單例本身的本質。如context.getApplicationContext()(Xamarin Context.ApplicationContext)所提供的Context僅僅是訪問應用程序Context的手段,如果單例需要它。

話雖這麼說,通過this SO question and its top two answers所闡述的,真正的問題是沒有這麼多如果,但是你要如何全局應用程序數據是一個單 - 的框架提供的Application單的擴展,或者作爲另外,您創建的獨立單身人士可能會或可能不會使用前者。

就我而言,我認爲我很滿足於簡單地繼承Application。在Application類的某些變體中存儲應用程序數據更直觀。此外,我一般都會對OOP的某些問題感到擔心,所以我覺得使用已有的東西比自己創建單身更安全。這個單例是由框架管理的,所以雖然這不能保證從本質上歸結爲全局變量(boo hiss)的典型困境中獲得安全性,但至少它比我自己的更安全一些。

P.S. - re:使用在UI線程中運行的Application,看起來使用靜態單例對我沒有任何額外的好處 - 再一次,因爲它們全部使用Application。我想我可能會遵循here提供的建議,並使用AsyncTask來處理大量操作。