2013-02-26 13 views
9

最近我已經開始使用Java for Android進行開發。Java中的靜態類(Android) - 使用還是不使用

我的想法是創建一個靜態類,它將在開始時加載大量的東西並存儲應用程序生命週期的結果。

我一直在閱讀很多關於如何在活動之間共享對象的問題,我認爲最好的辦法是創建一個靜態類。你怎麼看?我應該用另一種方法嗎?我在問,因爲我通過互聯網閱讀了很多反駁意見。

謝謝。

+0

最好的方法是使用SharedPreferences – Pragnani 2013-02-26 07:29:26

+1

@Pragnani共享首選項適用於某些類型的數據 - 適合鍵/值模型的少量數據,並且不需要很長時間才能加載到內存中。它不適合所有問題。 – 2013-02-26 07:30:53

+1

你的意思是*單身*嗎? 「靜態類」是一個內部類,它不需要其封閉類的實例,這與共享應用程序範圍內的數據無關。 – Wyzard 2013-02-26 07:32:55

回答

16

我假設你指的靜態字段一類,而不是靜態類其中,作爲Wyzard指出的那樣,是完全不同的東西。作爲一般的經驗法則,在靜態字段中保存信息不是一個好主意。這樣做的原因是,它可以防止實例化的無論是你在課堂上存儲多個實例的能力。

在一個Android應用程序,來處理具有數據存儲的應用程序本身是繼承android.app.Application類,並用它來處理應用程序全局數據相關的問題的最佳方式的具體情況:

class FooApplication extends Application 
{ 
    private String privData; 

    public String getPrivData() { 
     return privData; 
    } 
} 

然後,您需要聲明的是這個類是你的主應用程序類(而不是默認的Application)。在AndroidManifest.xmlapplication項增加以下內容:

FooApplication app = (FooApplication)Context.getApplicationContext(); 
String privData = app.getPrivData(); 

<application android:name="com.example.application.FooApplication" 
      ...> 
    ... 
</application> 

然後你可以從任何地方使用該方法Context.getApplicationContext()這將是你的Application子類的實例看你的應用程序中的應用實例

根據您想要查找「應用程序」的子類的位置,您可能必須調用沒有「上下文」的「getApplicationContext()」:

FooApplication app = (FooApplication)getApplicationContext(); 
String privData = app.getPrivData(); 
+0

我指的是靜態類。好的,我對這種類型的存儲應用程序數據有更多評論,所以我會這樣做。謝謝。 – Mihalko 2013-02-26 07:47:48

2

Android提供了一個名爲Application的類,只要您的應用程序未被殺死,它就不會被刷新。使用這個類進行初始化,靜態類作爲容器有點難看,但我無法確定這是爲什麼。

我只將它們用作常量的容器,例如不能表示爲EnumSets的位掩碼。

由於其他帖子提到SharedPreferences:我認爲首選項存在的價值,但不是加載你需要爲你的應用程序的結構。這些結構應該從代表或構成數據語義模型的構造中加載。

3

你的解決方案的問題在於你基本上創建了一大堆全局變量。它有時是不可避免的,但它具有全局變量一直存在的相同類型的問題 - 你很快就會遇到難以閱讀的代碼,而這些代碼並沒有很好的OO分解。你可以使用它,但是要謹慎地使用它 - 只有重要的數據結構才能在許多活動之間共享。

+1

您創建或使用的任何API最終歸結爲一個靜態或在應用程序生命週期中始終存在的引用。這完全取決於它的設計。 – ATrubka 2013-02-26 07:35:04