是否异步将java对象保存到内部内存?
我需要将一个java对象保存到内部内存中(如果具体的话,是不同服务器响应的高级集合)。现在我使用以下代码:是否异步将java对象保存到内部内存?,java,android,file,object,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
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) { }
}
}
公共无效写入(上下文){
FileOutputStream=null;
试一试{
fos=context.openFileOutput(BACKSTACK\u文件名,context.MODE\u PRIVATE);
}catch(FileNotFoundException e){e.printStackTrace();}
试一试{
ObjectOutputStream oos=新的ObjectOutputStream(fos);
oos.writeObject(backStack);
}捕获(IOE异常){
L.t(“未能写入backstack:+e.toString());e.printStackTrace();
}最后{
尝试{if(fos!=null)fos.close();}catch(IOException e){}
}
}
公共无效读取(上下文){
FileInputStream fis=null;
试一试{
fis=context.openFileInput(BACKSTACK_文件名);
}catch(FileNotFoundException e){e.printStackTrace();}
试一试{
ObjectInputStream ois=新ObjectInputStream(fis);
Deque list=(Deque)ois.readObject();
L.t(list.toString());
后退=列表;
}捕获(IOException | ClassNotFoundException e){
L.t(“读取backstack失败”+e.toString());e.printStackTrace();
}最后{
尝试{if(fis!=null)fis.close();}catch(IOException e){}
}
}
因为这里有上下文,所以执行UI线程挂起(滞后)白色操作。
物体越大,看起来就越糟糕。因此,问题是:
有没有办法将java对象异步保存到内存中?
请不要建议将数据库用于这样一项简单的任务。保存到内部内存不会有帮助。真正的问题是您在事件侦听器线程上做了太多的工作。如果你把很多东西保存到一个文件、一个数据库、“内存”中,你也会遇到同样的问题。。。。或者其他任何事情。无论您如何进行序列化,也无论您将序列化结果保存在何处,序列化的成本都相对较高
解决方案是使用
AsyncTask
使用AsyncTask…或线程来完成工作。因此,即使我需要使用上下文来处理文件,如果我使用AsyncTask,它也不会挂起(延迟)UI?请提供一段代码片段。1)正确。(至少……达到一级近似值)2)谷歌肯定能帮你。。。。。