在我的项目中,我正在对位图的像素进行重大更改,我想在此项目中添加undo redo功能。因为在VM的内存中保存几个位图并不是一个好主意我认为我唯一的选择是存储历史记录(位图)作为临时文件。在开始实施之前,我想确定我在这里做的事情并不愚蠢。
答案 0 :(得分:2)
你需要多快才能发生撤消?记住:记忆比其他任何东西都快。
您需要多少位图才能返回并撤消?如果它很多,那么是的,临时文件可能是最好的。
如果他们关闭应用程序并稍后返回(或应用程序被杀死以释放内存)该怎么办?到达那些地方有多重要?如果它很重要,那么您需要将它们保存到磁盘。
图像有多大?这也可能会影响你决定你能记忆多少。
或许甚至可以考虑两者中的一些?保留最新内存并将其保存到磁盘上?
答案 1 :(得分:2)
取决于您要维护的处理能力和撤消历史记录的长度。如果您可以以合理的速度应用转换,那么您可以保留一个位图x操作的副本,如果是撤消,只需将最后的x-1转换应用于它。
答案 2 :(得分:2)
您是否在堆上有空间,将撤销状态存储在持久存储中(而不是临时文件)是您唯一的选择。用户可以离开您的应用程序,此时您的进程可能会被终止。返回后,您需要使用他们上次看到的相同状态重新启动您的应用。你自己堆里的东西将不再存在;你不能在onSaveInstanceState()的Bundle中放置大位图。所以你需要将它们放在持久存储中。
确保在执行此操作时不阻止UI - 从更新UI异步写入新状态。