异步将java对象保存到内部存储器?

时间:2017-02-04 05:27:56

标签: 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对象异步保存到内部存储器?

请不要建议将数据库用于这么简单的任务。

1 个答案:

答案 0 :(得分:1)

保存到内存不会有帮助。真正的问题是你在事件监听器线程上做了太多工作。如果将大量内容保存到文件,数据库和内部存储器中,您将遇到同样的问题。 ....或其他任何东西。无论你如何操作,序列化都相对昂贵,无论你在哪里保存序列化的结果。

解决方案是使用AsyncTask进行工作。