事情是:当我开始学习android的开发时,我想我会将我的内部数据存储在专用类中的公共静态变量中,仅用于此目的,因此我可以轻松地从任何活动访问它们,并且它曾经并且仍然非常重要,不会有任何重复,而且这些值总是独一无二的,就像Singleton模型一样。这非常有效,因为它不是最可靠的解决方案。当用户通过主页按钮将应用程序置于后台时,问题就开始了。它仍然存在,因为上帝知道多少时间,也许是几分钟,甚至几天,甚至更多......然后他重新打开应用程序,所有的静态变量都变为空,因为系统已经破坏了它们。一些变量是简单的字符串,但有些变量非常复杂,属于自己的类。
第一个问题是,当应用程序进入后台时,是否可以依赖任何全局钩子,我可以保存theese数据?因此,当用户再次将应用程序拉到前台时,我可以从已保存的状态重新初始化theese变量。
第二个问题是,保存复杂数据的最佳方法是什么?据我所知,为了保存字符串,SharedPreferences很好,但是更复杂的类呢?我也可以使用SharedPreferences,还是应该使用其他东西?
现在这是我能想到的全部内容,请提前获得帮助!
答案 0 :(得分:3)
关于类中的整个静态变量的坏主意。忽视整个全球变量的崩溃,他们并没有坚持下去。如果需要保留数据,则应使用SharedPreferences或数据库。
答案 1 :(得分:0)
对于您的第一个问题,我相信您所寻找的内容类似于活动生命周期中的onResume()方法。
关于存储的问题,可以使用sqlLite。
答案 2 :(得分:0)
答案 3 :(得分:0)
您肯定需要使用共享偏好设置,这是最简单的示例:
//Create a new class
public class PizzaApplication extends Application {
private static String sharedPreferences = "Pizza";
private static Context context;
@Override
public void onCreate (){
super.onCreate();
context = this;
}
public static void saveString(Context context, String key, String value) {
SharedPreferences sharedPref = context.getSharedPreferences(sharedPreferences,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(key, value);
editor.commit();
}
public static String getString(Context context, String pKey) {
SharedPreferences sharedPref = context.getSharedPreferences(sharedPreferences,Context.MODE_PRIVATE);
return sharedPref.getString(pKey, null);
}
}
//FROM ACTIVITY
//Save string
PizzaApplication.saveString(getApplicationContext(), "country", "test");
//Receive it
String testString = PizzaApplication.getString(getApplicationContext(), "country"); //returns "test"