2014-02-16 102 views
11

在我的android應用程序中,我需要一個放置變量成員id的地方。 問題是,它是從在線API,我需要找到一種方法來存儲/檢索它如何在android中創建一個全局變量?

我試圖把它放在一個自定義的類,但問題是,它會失去,如果我殺了該活動,我也知道有一種方法來擴展應用程序。

所以我想知道什麼是最好的方式來存儲全局變量?

我不得不implment:

  1. 節省onSaveState
  2. 變量保存它sharepref
  3. 保存手動
  4. 手動檢索

感謝

更新: 感謝您的回覆。如果我只有3個變量(簡單數據,例如布爾值,短語),並且在重新啓動應用程序後需要它,我應該只使用share pref來存儲它嗎?它的缺點是什麼?例如它會損害性能嗎?謝謝

+2

查找Singleton設計模式。 – Smutje

+1

請不要看單身[反模式](http://en.wikipedia.org/wiki/Anti-pattern)。 – amit

回答

24

您可以在android中創建全局變量,方法是在擴展Application類的類中聲明它們。

就是這樣。

class MyAppApplication extends Application { 

    private String mGlobalVarValue; 

    public String getGlobalVarValue() { 
     return mGlobalVarValue; 
    } 

    public void setGlobalVarValue(String str) { 
     mGlobalVarValue = str; 
    } 
} 

MainActivity.java

class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle b){ 
     ... 
     MyAppApplication mApp = ((MyAppApplication)getApplicationContext()); 
     String globalVarValue = mApp.getGlobalVarValue(); 
     ... 
    } 
} 

更新

該保持的值,直到您的應用程序不被破壞。如果即使在應用程序實例銷燬 後仍希望保存值,那麼可以使用SharedPreferences這種最佳方式來執行此操作。

瞭解SharedPrefernces從這裏:http://developer.android.com/reference/android/content/SharedPreferences.html

+1

如果我想在活動之外訪問這些值,如果在其他層中說,該怎麼辦?我不能在那裏做getApplicationContext()。而且我不應該在不同的層中傳遞Context對象。 –

+1

什麼是靜態變量? –

+0

@GurgenHakobyan我認爲我們在調用getApplicationContext()時獲得'''MyAppApplication''的實例,並且使用靜態變量具有相同的效果。 – JCarlos

1

它總是更好地存儲要在下列方式之一來使用多次的值: -

  • 共享偏好
  • 辛格爾頓類
  • 寫入文件
  • SQLite數據庫
  • 存儲在網絡服務器上
+0

我不同意。如果在重新啓動應用程序時也需要數據,那就更好了。如果不是這樣,並且例如數據需要在全新的啓動時保持新鮮,TGMCians做出的答案符合需要。 –

6
  • 如果你需要一個全局變量,這是多種活動之間共享和生存它們的生命週期的變化,不過在其他方面不持久,也不會生存重新啓動應用程序時,方法建議在第一個答案(延伸Application並把它放在那裏)是可以的。
  • 如果您需要一個持續的全局設置,它應該在應用程序重新啓動時仍然存在,那麼您應該使用建議的其他方法之一。 SharedPreferences可能是最容易使用的。

也看到這個堆棧溢出問題:What's the best way to share data between activities?