Android - 在哪里保存全球数据?

时间:2012-12-27 02:35:13

标签: android global-variables

我有几个2D和3D数组,我想从我的应用中的多个位置访问,当我的应用启动时,它将从SharedPreferences作为字符串加载,并在每次保存时都保存回SharedPreferences任何活动都会调用onPause()。在具有意图或捆绑的活动之间传递它们太繁琐了。有没有办法在Android中全局存储数据?

3 个答案:

答案 0 :(得分:2)

如果我需要在SharedPreferences中存储一些数据并且需要在我的应用程序中访问多个位置,那么我会像下面的代码那样进行编码。

public class YourClassName extends Application{


    private static YourClassName mClassInstance;

    public static SharedPreferences mSharedPreferences;

    public static Editor mEditor;


    public static String KEY_DB_STATE="DbStateKey";

    public static String SHARED_PREFERENCE_NAME="YourClassNamePref";

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mClassInstance=this;
    }


    public static YourClassName getInstance(){
          checkAppCreated();
        return mClassInstance;
    }



    public static void checkAppCreated(){
         if (mClassInstance == null)
                throw new IllegalStateException("Application not created yet!");
    }



    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }


    public static void setDatabaseState(String sharedPreferenceName,boolean state){

        mSharedPreferences=getInstance().getSharedPreferences(sharedPreferenceName, Context.MODE_PRIVATE);
        mEditor=mSharedPreferences.edit();
        mEditor.putBoolean(KEY_DB_STATE, state);
        mEditor.commit();

    }


    public static boolean getDatabaseState(String sharedPreferenceName){
        mSharedPreferences=getInstance().getSharedPreferences(sharedPreferenceName, Context.MODE_PRIVATE);
        return mSharedPreferences.getBoolean(KEY_DB_STATE, false);
    }



}

注意:

不要忘记将您的Application类放在android清单文件中,就像我的班级一样。

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:name="com.android.YourClassName">

答案 1 :(得分:1)

当我需要全局时,我存储在MyApplication类中。几乎从任何地方都可以获得对应用程序/应用程序上下文的引用。

内存泄漏警告:短期收藏中的长期对象(如活动)至少我的应用程序大多数时间都在生活!

答案 2 :(得分:1)

我们所做的是使用Globals类,它主要使用静态字段和静态方法,但并非所有都是静态的。这些主要是可以由应用程序中的许多不同类/活动使用的字段和方法。这样做的问题是不允许它失去控制。每隔一段时间,我会经历一次,看看可以拿出什么,一起上课或者搬到现有的班级。有时候还存在需要应用程序上下文的问题,我通过在某些情况下传递上下文或创建获取应用程序上下文的方法来解决这个问题。内存泄漏可能存在问题,但到目前为止我没有遇到任何问题,但这并不意味着我不会。

我被告知不要这样做,而且这不是OOP,但我认为这是不正确的,没有人告诉我为什么这是错的。您仍然可以创建对象并遵循OOP标准。很高兴我能帮忙