我有几个 2D 和 3D 数组,我想从我的应用程序中的多个位置访问它们,这些数组将在我的应用程序启动时作为字符串加载,并在任何活动被调用时SharedPreferences
保存回来。在具有意图或捆绑的活动之间传递它们太乏味了。有没有办法在Android中全局存储数据?SharedPreferences
onPause()
问问题
1913 次
3 回答
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);
}
}
笔记:
不要忘记将您的应用程序类放在 android 清单文件中,如下面的我的类。
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" android:name="com.android.YourClassName">
于 2012-12-27T05:28:19.323 回答
1
我们所做的是使用了一个 Globals 类,该类主要使用静态字段和静态方法,尽管并非所有都是静态的。这些主要是应用程序中许多不同的类/活动可能使用的字段和方法。这样做的问题是不允许它失控。每隔一段时间,我就会浏览一下,看看哪些东西可以被拿出来放在一起,或者转移到现有的课堂上。有时存在您需要应用程序上下文的问题,我通过在某些情况下传递上下文或创建获取应用程序上下文的方法来解决这个问题。内存泄漏可能存在问题,但到目前为止我还没有遇到任何问题,尽管这并不意味着我不会。
有人告诉我不要这样做,这不是 OOP,但我认为这是不正确的,没有人告诉我为什么这是错误的。您仍然可以创建对象并遵循 OOP 标准。很高兴我能帮上忙
于 2012-12-27T15:48:24.507 回答
1
当我需要全局存储时,我存储在 MyApplication 类中。几乎可以从任何地方获得对应用程序/应用程序上下文的引用。
内存泄漏警告:至少我的应用程序大部分时间都存在于短期集合(如活动)中的长期对象!
于 2012-12-27T02:39:20.977 回答