我一直在尝试在Android中构建一个任务列表,我希望它能够记住列表中的内容,即使应用程序已关闭。我一直在尝试使用onSaveInstanceState
执行此操作,如下所示:
public class Main extends Activity implements OnClickListener, OnKeyListener {
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...
if (savedInstanceState != null) {
ToDo = savedInstanceState.getStringArrayList("MyArrayList");
AA.notifyDataSetChanged();
} else {
ToDo = new ArrayList<String>(); // Initiate ToDo
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putStringArrayList("MyArrayList", ToDo);
}
// ...To-Do implementation follows
}
但这不起作用,所以我开始阅读onSaveInstanceState
,如果我理解正确,那么你实际上无法在会话之间保存数据。那么你怎么能这样做呢?
答案 0 :(得分:6)
查看有关Data Storage的Android文档,了解保留数据的选项。您可以使用共享首选项,SQLite数据库,私有内部目录中的文件或SD卡上的文件(如果可用)。
基本上,onSaveInstanceState
用于Android取消活动以回收内存的情况。在这种情况下,操作系统会记录您的活动的存在,以防用户返回,然后它将Bundle
从onSaveInstanceState
传递到您的onCreate
方法。它并不意味着用于通用存储。
答案 1 :(得分:0)
我会把我的待办事项放在数据库中,然后在'onPause()'中将数据保存在数据库中。当活动松散数据等时,您可能需要阅读Activity lifecycle以获取描述。
同样this thread可能对onSaveInstanceState感兴趣。
答案 2 :(得分:0)
onSaveInstanceState(),例如在方向更改期间或设备在低内存上运行时。使用它来保存状态变量并在杀死和重新创建活动时采取适当的操作。
您需要的是SharedPreferences,即使应用程序关闭并重新打开也可以保留数据。看看这个:
//Initialize the list
Set<String> valueSet = new HashSet<>();
valueSet.add("A");
valueSet.add("B");
//Saving data in sharedPreferences
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("key_name", valueSet);
editor.commit();
//Retrieving saved data from sharedPreferences (even in later sessions)
valueSet = sharedPreferences.getStringSet("key_name", null);