保存绘画应用数据以应对iPhone上的中断?

时间:2011-03-02 20:32:43

标签: iphone ios4 image-processing

我正在制作iPhone位图绘画应用。我想支持大约五个1024x768层(~15Mb的数据)。我的问题是,我不知道用什么策略来保存用户的文档以应对我的应用程序被中断。

我的文档文件格式是将每个图层保存为.png文件,然后保存包含图层元数据的短文本文件。我的问题是,如果应用程序被电话等中断,我不太可能有足够的时间让我的应用程序能够将所有数据保存到磁盘,因为保存所有.png文件可能需要~10秒。我有什么选择?

我考虑添加一个每五分钟调用一次的自动保存功能。在最坏的情况下,如果应用程序无法在中断时节省(这不是理想的话),用户将失去几分钟的工作。

我考虑过的一个想法是跟踪自上次自动保存以来哪些图层已更改,并且只更新需要更新的图层文件。这意味着,在中断时,我的应用程序可能只需要在典型情况下保存一个图层。但是,最糟糕的情况仍然是需要保存多个层。

我不知道该怎么做。实际上,我注意到许多流行的iPhone绘画应用程序如果被电话打断,评论都会很好,会丢失当前的文档进度。我开始怀疑有一种方法可以解决这个特殊的问题,而且我可能只需要一些不太理想的东西。

2 个答案:

答案 0 :(得分:2)

IOS4 SDK为长时间运行的后台任务提供support,这是保存图层的最佳位置。来自文档:

  

您可以使用任务完成来确保当用户离开应用程序时,重要但可能长时间运行的操作不会突然结束。例如,您可以使用此技术将用户数据保存到磁盘或从网络服务器完成下载重要文件。

     

在暂停之前的任何时候,应用程序都可以调用beginBackgroundTaskWithExpirationHandler:方法向系统请求额外的时间来在后台完成一些长时间运行的任务。如果请求被授予,并且在任务正在进行时应用程序进入后台,则系统会让应用程序运行一段时间而不是暂停它。 (UIApplication对象的backgroundTimeRemaining属性包含应用程序必须运行的时间。)

答案 1 :(得分:1)

我不确定这是否可行(您没有说明用户如何与图层交互,或者确实如果这种交互从他们的角度来看是透明的),但作为建议为什么不简单地保存“活动”当用户切换图层时,通过后台线程进行分层输出,因为在应用程序背景化时,您只需要保存单个图层。