2

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

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

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

目前我能想到的就这些了,谢谢提前帮忙!

4

4 回答 4

3

类中的整个静态变量的坏主意。忽略整个全局变量崩溃,它们不会持续存在。如果您需要持久化数据,您应该使用SharedPreferences或数据库。

于 2012-10-05T18:13:46.107 回答
0

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

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

于 2012-10-05T18:16:37.997 回答
0

文档解释了 Android 上的所有数据存储选项。SharedPreferences 非常适合简单类型,但听起来你最好使用一个或多个SQLite数据库。

于 2012-10-05T18:16:44.447 回答
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"
于 2017-07-03T13:47:22.317 回答