调用onPause时保存大量数据?

时间:2011-02-25 19:52:00

标签: java android

对于我的应用程序,我有大约15Mb(可以压缩一些处理能力到大约5Mb)的音频+视频+图像数据,我需要保存到磁盘。例如,当用户被电话打断(因为活动可能会在此之后被杀)以及用户离开应用程序时,我需要保存此信息。

如果我不压缩它,我可以在大约10秒钟内将数据保存到SD卡,如果我压缩它,我可以将数据保存到SD卡,我希望它压缩。 调用onPause时我有哪些保存数据的选项,以确保数据已保存?

从一些基本实验中,如果onPause在5秒后没有完成,我的活动就会被杀死。我有过一些想法:

  1. 在onPause中启动新线程并将数据保存在那里。这似乎工作正常,但似乎是我不应该做的事情。

  2. 启动服务,以某种方式将数据复制到服务(这会很慢吗?)然后获取服务以保存数据。我认为这会在手机顶部放置一个通知图标,但我不认为用户在此处看到“保存数据...”任务很糟糕。

  3. 我可以快速将数据放入SQL数据库,然后在用户返回应用程序后保存吗?

  4. (由于应用程序的性质,我实际上没有任何实际的方法可以保存数据,因为用户可以通过耗时的操作以破坏性方式转换数据(例如,某些操作需要10秒)即使我存储了原始数据和为重新创建数据而执行的操作列表,用户在下次启动应用程序时也必须等待一两分钟。)

1 个答案:

答案 0 :(得分:5)

  

调用onPause时,我有什么选项可以保存我的数据,以确保数据已保存?

从技术上讲,你想要的是不可能的。 onPause()之后无法保证。

最好的答案是@ViktorLannér所建议的。换句话说,不要等到onPause()需要做10-20秒的I / O.设计一些机制,允许您在用户执行操作时以增量方式保存,如果没有别的话,则作为回退机制。这类似于数据库维护事务日志的方式。

  

在onPause中启动一个新线程并在那里保存数据。这似乎工作正常,但似乎是我不应该做的事情。

这很危险,因为如果活动正在结束(例如,onDestroy()将暂时调用),Android可能会在您的主题完成之前终止您的流程。

  

启动服务,以某种方式将数据复制到服务(这会很慢吗?)然后获取服务以保存数据。我认为这会在手机的顶部放置一个通知图标,但我不认为用户在这里看到“保存数据...”任务很糟糕。

将其设为IntentService,以便在工作完成后自动关闭。我不会“将数据复制到服务”,而是在需要时由静态数据成员集中提供数据。这不会自动将“通知图标放在手机顶部”,对于这段时间内的某些内容,可能不需要这样做。

  

我可以快速将数据放入SQL数据库,然后在用户返回应用程序后保存吗?

对于SQL数据库而言,Flash I / O并不比其他任何东西快。

  

由于应用程序的性质,我实际上没有任何实际的方法可以保存数据,因为用户可以通过耗时的操作以破坏性的方式转换数据(例如,某些操作需要10秒) p>

然后这可能不适用于移动平台。考虑这个应用程序是否适合使用该技术。