调用onPause时保存大量数据?

rbc*_*bcc 4 java android

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

如果我不压缩它,我可以在大约10秒内将数据保存到SD卡,如果我压缩它,我可以将它保存到SD卡,我希望它压缩.当调用onPause时,我有什么选项可以保存我的数据,这样我可以确定数据已经保存了?

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

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

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

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

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

Com*_*are 5

当调用onPause时,我有什么选项可以保存我的数据,这样我可以确定数据已经保存了?

从技术上讲,你想要的是不可能的.之后没有任何保证onPause().

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

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

这很危险,因为如果活动正在关闭(例如,onDestroy()将暂时调用),Android可能会在您的线程完成之前终止您的进程.

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

使它成为一个IntentService,所以当工作完成时它会自动关闭.我不会"将数据复制到服务",而是在需要时由静态数据成员集中提供数据.这不会自动将"通知图标放在手机顶部",对于这段时间内的某些内容,可能不需要.

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

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

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

那么这可能不是为移动平台设计的.考虑这个应用程序是否适合使用该技术.