我需要将一个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/