3

我一直在尝试在 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,如果我理解正确,那么你实际上无法在会话之间保存数据。那么你怎么能做到呢?

4

3 回答 3

7

查看有关数据存储的 Android 文档,了解有关持久数据的选项。您可以使用共享首选项、SQLite 数据库、私有内部目录中的文件或 SD 卡上的文件(如果可用)。

基本上,onSaveInstanceState用于 Android 终止您的活动以回收内存的场景。在这种情况下,操作系统将记录您的活动是否存在,以防用户返回它,然后它将Bundlefrom传递onSaveInstanceState给您的onCreate方法。它不适用于通用存储。

于 2012-05-30T20:57:12.113 回答
0

我会将待办事项放在数据库中,并将数据保存在数据库中的“onPause()”中。当活动丢失数据等时,您可能需要阅读活动生命周期以获取描述。

这个线程也可能对 onSaveInstanceState 感兴趣。

于 2012-05-30T21:01:47.113 回答
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);
于 2016-06-14T20:54:42.123 回答