gpt4 book ai didi

java - 调用 onPause 时保存大量数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:17 25 4
gpt4 key购买 nike

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

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

根据一些基本实验,如果 onPause 在 5 秒后仍未完成,我的 Activity 就会被终止。我的一些想法:

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

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

  3. 我能否将数据快速放入 SQL 数据库,然后在用户返回应用程序时保存它?

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

最佳答案

What options to I have for saving my data when onPause is called such that I can be sure the data has been saved?

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

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

Starting a new Thread in onPause and saving the data there. This seems to work fine but seems like something I shouldn't be doing.

这很危险,因为如果 Activity 正在关闭(例如,onDestroy() 将立即被调用),Android 可能会在您的线程完成之前终止您的进程。

Starting a service, copying the data to the service somehow (would this be slow?) and then getting the service to save the data. I think this puts a notification icon at the top of the phone, but I don't think it's awful for a user to see the "Saving data..." task here.

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

Can I put the data in a SQL database quickly and then save it later when the user returns to the app?

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

Due to the nature of the app, there really isn't any practical way I can save the data as I go because the user can transform the data in destructive ways with time consuming operations (e.g. 10 seconds for some operations

那么这可能不是为移动平台设计的。考虑此应用是否是对技术的适当使用。

关于java - 调用 onPause 时保存大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com