我知道,这里有很多关于保存/检索数据的问题。我正在寻找自己的东西,并且真的以为我可以设法找到我的答案,而不必问一个问题"但我开始怀疑我没有看到答案的东西在这里。
我的情况:
当然,我正在制作应用。关闭应用程序后,我想保存一个简单的数字数组(0或1)或布尔值。启动应用程序后,我想搜索该数组(如果存在),并检索它以便在应用程序中使用。
我开始将我的代码放入将使用数组的活动中。但是,我开始想知道是否必须将重写的onStop()
函数复制/粘贴到我的所有活动中?或者我是否在主要活动中进行,并以某种方式链接其他活动。
基本上,无论应用程序关闭时应用程序当前处于什么状态/活动,我都希望能够保存int / bool数组并在应用程序启动时将其打开。
也许我不知道如何搜索我想要的东西,所以解释它感觉是正确的事情。
我不介意做更多的搜索,但如果有人至少指出我正确的方向,我将非常感激。
编辑:如果有更好的方式来做我想要的比我描述的更好(例如,使用不同的状态而不是onStop()
),请随意抛出想法。这是我第一次真正不得不处理这些活动。生命周期和我甚至在浏览了android开发教程之后有点困惑。我认为他们在大多数情况下表现不佳。
答案 0 :(得分:11)
当您的应用程序需要保存一些持久性数据时,您应该始终使用onPause()
方法而不是onStop()
。因为如果Android操作系统杀死了你的进程,那么永远不会调用onStop()
和onDestroy()
方法。同样,在onResume()
方法中检索数据。
答案 1 :(得分:2)
看看你想要实现的目的,SharedPreferences就是你想要的。
文档说明:
" SharePreferences提供了一个允许您保存的通用框架 并检索原始数据类型的持久键值对。您 可以使用SharedPreferences保存任何原始数据:布尔值, 浮点数,整数,长整数和字符串。此数据将持续跨用户 会话(即使你的申请被杀)。"
答案 2 :(得分:1)
使用SharedPreference
存储少量数据或使用SQLite
存储大量数据。
看到这个链接
http://developer.android.com/guide/topics/data/data-storage.html
答案 3 :(得分:0)
序列化一个对象并传递它比共享首选项更可靠(与共享首选项的一致性有很多麻烦):
public class SharedVariables {
public static <S extends Serializable> void writeObject(
final Context context, String key, S serializableObject) {
ObjectOutputStream objectOut = null;
try {
FileOutputStream fileOut = context.getApplicationContext().openFileOutput(key, Activity.MODE_PRIVATE);
objectOut = new ObjectOutputStream(fileOut);
objectOut.writeObject(serializableObject);
fileOut.getFD().sync();
} catch (IOException e) {
Log.e("SharedVariable", e.getMessage(), e);
} finally {
if (objectOut != null) {
try {
objectOut.close();
} catch (IOException e) {
Log.e("SharedVariable", e.getMessage(), e);
}
}
}
}
然后使用一个类:
public class Timestamps implements Serializable {
private float timestampServer;
public float getTimestampServer() {
return timestampServer;
}
public void setTimestampServer(float timestampServer) {
this.timestampServer = timestampServer;
}
}
然后,无论你想在哪里写变量,都要使用:
SharedVariables.writeObject(getApplicationContext(), "Timestamps", timestampsData);
答案 4 :(得分:-2)
实现这一目标的最佳方式是:
MySettings.load()
。此加载方法设置数组save()
方法。公众也。现在,您可以在应用中的任何位置保存。此save()
方法读取数组并在SharedPreferences 代码示例:
public class MySettings {
private static List<Integer> data;
public static void load() {
data = new ArrayList<Integer>();
// use SharedPreferences to retrieve all your data
}
public static void save() {
// save all contents from data
}
public static List<Integer> getData() {
return data;
}
public static void setData(List<Integer> data) {
MySettings.data = data;
}
}