我正在开发一个 Android 应用程序,其中有许多 String
、String[]
、int
和 int[]<使用
。我必须使用 intent.putExtra()
将此变量从一个 Activity 传递到另一个 Activity 。但在我看来有点恶心。我喜欢优化我的代码。
我会将这些变量用作静态变量。但使用太多静态
数据可能会导致内存泄漏。
那么在android的不同activity之间管理随机使用的变量的正确方法是什么?
提前致谢。
最佳答案
事实上,静态变量会导致内存泄漏和NullPointerExceptions
。
您可以将字符串和字符串数组保存到SharedPreferences
,因此这里有一个适合您的解决方案(始终记住对要从 SharedPreferences 获取的数据进行空检查):
用于设置和获取对象的 SharedPreferences 类:
public class SharedPrefManager {
public static boolean saveArray(String[] array, String arrayName, Context mContext) {
SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(arrayName +"_size", array.length);
for(int i=0;i<array.length;i++)
editor.putString(arrayName + "_" + i, array[i]);
return editor.commit();
}
public static String[] loadArray(String arrayName, Context mContext) {
SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);
int size = prefs.getInt(arrayName + "_size", 0);
String array[] = new String[size];
for(int i=0;i<size;i++)
array[i] = prefs.getString(arrayName + "_" + i, null);
return array;
}
public static void setDefaults(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getDefaults(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
}
将数组设置为 SharedPreferences: 清除数组并将其更新到共享首选项中。
//save array to shared pref
SharedPrefManager.saveArray(array, "array_tag", getApplicationContext());
从 SharedPreferences 获取数组:
String [] a = SharedPrefManager.loadArray("array_tag", getApplicationContext());
将字符串保存到 SharedPreferences
SharedPrefManager.setDefaults("your_tag", "string_value", context);
从 SharedPreferences 获取字符串
SharedPrefManager.getDefaults("your_tag", getApplicationContext())
关于java - android 类之间传递大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23381110/