java - 将java对象异步保存到内存中?

标签 java android file object

我需要将一个java对象保存到内部存储器(具体来说是不同服务器响应的高级集合)。现在我使用这段代码:

public void write(Context context) {
    FileOutputStream fos = null;
    try {
        fos = context.openFileOutput(BACKSTACK_FILENAME, Context.MODE_PRIVATE);
    } catch (FileNotFoundException e) { e.printStackTrace(); }

    try {
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(backStack);
    } catch (IOException e) {
        L.t("failed to write backstack: " + e.toString()); e.printStackTrace();
    } finally {
        try { if (fos != null) fos.close(); } catch (IOException e) { }
    }
}

public void read(Context context) {
    FileInputStream fis = null;
    try {
        fis = context.openFileInput(BACKSTACK_FILENAME);
    } catch (FileNotFoundException e) { e.printStackTrace();}

    try {
        ObjectInputStream ois = new ObjectInputStream(fis);
        Deque<FragmentInfo> list = (Deque<FragmentInfo>) ois.readObject();
        L.t(list.toString());
        backStack = list;
    } catch (IOException | ClassNotFoundException e) {
        L.t("failed to read backstack" + e.toString()); e.printStackTrace();
    } finally {
        try { if (fis != null) fis.close(); } catch (IOException e) { }
    }
}

由于我们这里有上下文,UI 线程挂起(滞后)白色操作被执行。 而且物体越大,看起来就越糟糕。所以问题是:

有没有办法将java对象异步保存到内存中?

请不要建议使用数据库来完成如此简单的任务。

最佳答案

保存到内部存储器没有帮助。真正的问题是您在事件监听器线程上做了太多工作。如果您将大量内容保存到文件、数据库、“内存”……或其他任何东西中,您也会遇到同样的问题。无论您如何执行,也无论您将序列化结果保存在哪里,序列化的成本都相对较高。

解决方案是使用 AsyncTask 来完成工作。

关于java - 将java对象异步保存到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42036831/

相关文章:

java - 在 Eclipse 中升级项目

file - Groovy(文件IO): find all files and return all files - the Groovy way

java - jar 中的名称 SNAPSHOT 是什么意思?/*snapshot*.jars 有什么问题?

Java嵌套ConcurrentHashMap是线程安全的吗?

java - 如何正确更新textView?

java - 开始使用 envers + hibernate(简单而完整的示例)

从 sqlite 获取数据时的 Android 进度对话框

java - 如何从 getView 设置正确的 SeekBar 的进度?

python - 输入两个名称相同但扩展名不同的文件

windows - 用于打印文本文件中搜索字符串的前一行和下一行的批处理脚本