有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为图像编辑器快速、可靠地保存/加载文档状态

我想对我存储Android和iPhone手机位图编辑器状态的方法提出一些批评。即使是“我觉得很好!”反应会很好

在应用程序中,当前用户文档包含几个位图层(每个层可能是1024×768像素),每个层都可以绘制。该应用程序的基本要求是:

  1. 我需要能够保存和恢复文档状态

  2. 当用户退出应用程序或接到电话时,我需要能够快速保存文档状态(大约2秒钟内)

  3. 如果应用程序崩溃,我需要能够恢复文档状态(不过,如果用户损失了大约30秒的工作,也没关系)

对于1,我找不到任何支持层的打开文件格式。我打算使用以下文件结构来存储我的文档:

document_folder/
  layer1.png
  layer2.png
  ...
  metadata.xml

这些层只存储为一个值。png文件和。xml文件包含当前可见的图层等数据。应用程序可以按原样打开文档文件夹,也可以将文件夹存储在文件夹中。压缩文件。对于其他应用程序来说,这似乎也是一种很好的简单格式

除此之外。png文件,我也将允许层被保存在一个自定义。包含位图中未经处理的原始像素数据的原始文件格式。我可以在手机上快速保存这些信息(<;0.5s)。png文件需要一两秒钟的时间

我快速保存文档的计划是,在启动时创建一个名为/autosave的文件夹,然后保存。所有图层的原始版本。在一个图层上执行一些编辑命令后,我会更新该图层。背景线程中该层的原始文件。为了保存时的健壮性,我会将层保存为layer1_tmp。当我确认文件已完全写入时,请替换layer1。用这个文件

如果应用程序在使用过程中崩溃,我会重新打开/autosave文件夹。当应用程序关闭或用户接到电话时,我只需将上次修改的图层更新为autosave即可。当用户想要保存时,我只需转换所有。将原始文件发送到。png文件,然后压缩文件夹

你觉得呢?有什么明显的缺陷吗?有没有更简单的方法?我是不是在重新发明轮子?谢谢


共 (2) 个答案

  1. # 1 楼答案

    我觉得你有个很棒的计划。我可能也会这么做(但这本身并不意味着什么:-)

    我想的是,如果你不仅可以有一个工作线程来保存文件,还可以有一个完整的后台服务(当然有一个工作线程,因为服务本身也在主线程中运行)

    通过这种方式,无论绘图活动是否崩溃或有人在呼叫您,您都可以保证始终存在可以处理图层增量的活动。突然之间,你就没有了同样的时间限制(写操作可能需要10秒钟,如果它愿意的话,你的活动既不被阻止,也不依赖于写操作)。当然,当您的服务清空其保存队列(以节省系统资源)时,它会自杀

    为了进一步推广这一想法,我不知道您正在向原始文件写入多少数据?您是每次都编写完整的1024x768层,还是只重写更改的部分?我也不确定数据将如何实际传输到服务(从活动)。我不知道Intent是否可以处理字节数组的最大大小

    希望这能给你提供更多的想法

    干杯

  2. # 2 楼答案

    你的想法对我很好:把图层保存在背景中。用户当前未编辑的任何层都应排队,以便在用户从该层切换到其他层时立即保存。如果应用程序被中断,你只需要保存当前的工作层,正如你所说,这可以在0.5s内完成

    为什么还要为png格式烦恼呢?只有在将数据导出到另一台机器/系统时才需要它,对吗