保存内部数据的最佳方法?

时间:2012-10-05 18:11:24

标签: android android-lifecycle

事情是:当我开始学习android的开发时,我想我会将我的内部数据存储在专用类中的公共静态变量中,仅用于此目的,因此我可以轻松地从任何活动访问它们,并且它曾经并且仍然非常重要,不会有任何重复,而且这些值总是独一无二的,就像Singleton模型一样。这非常有效,因为它不是最可靠的解决方案。当用户通过主页按钮将应用程序置于后台时,问题就开始了。它仍然存在,因为上帝知道多少时间,也许是几分钟,甚至几天,甚至更多......然后他重新打开应用程序,所有的静态变量都变为空,因为系统已经破坏了它们。一些变量是简单的字符串,但有些变量非常复杂,属于自己的类。

第一个问题是,当应用程序进入后台时,是否可以依赖任何全局钩子,我可以保存theese数据?因此,当用户再次将应用程序拉到前台时,我可以从已保存的状态重新初始化theese变量。

第二个问题是,保存复杂数据的最佳方法是什么?据我所知,为了保存字符串,SharedPreferences很好,但是更复杂的类呢?我也可以使用SharedPreferences,还是应该使用其他东西?

现在这是我能想到的全部内容,请提前获得帮助!

4 个答案:

答案 0 :(得分:3)

关于类中的整个静态变量的坏主意。忽视整个全球变量的崩溃,他们并没有坚持下去。如果需要保留数据,则应使用SharedPreferences或数据库。

答案 1 :(得分:0)

对于您的第一个问题,我相信您所寻找的内容类似于活动生命周期中的onResume()方法。

关于存储的问题,可以使用sqlLite。

答案 2 :(得分:0)

document提供了Android上所有数据存储选项的说明。 SharedPreferences非常适合简单类型,但听起来您最好使用一个或多个SQLite数据库。

答案 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"