我需要将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对象异步保存到内部存储器?
请不要建议将数据库用于这么简单的任务。
答案 0 :(得分:1)
保存到内存不会有帮助。真正的问题是你在事件监听器线程上做了太多工作。如果将大量内容保存到文件,数据库和内部存储器中,您将遇到同样的问题。 ....或其他任何东西。无论你如何操作,序列化都相对昂贵,无论你在哪里保存序列化的结果。
解决方案是使用AsyncTask
进行工作。