首页 > 解决方案 > 我想在服务重启期间保留我的数据,但我的数据不是简单的变量名称值或表格格式。我该怎么办?

问题描述

我想在服务重启期间保留数据,它使用 {arraylist of integers} 和其他一些变量的arraylist。由于它大约是 40-60 MB,我不希望每次服务重新启动时都生成它(这需要很多时间);我想生成一次数据,并可能复制它以供下次服务重启。怎么做到呢?

在建议将数据写入文件之前,请考虑如何将类似于多维数组(3d 或以上)的数据结构放入文件中;完成后,也可能需要大量时间来阅读。

标签: javaandroidservice

解决方案


因此,由于文件的大小、行数和大小(内部数组),您担心从文件中读取会花费一些时间。

我认为可能值得停下来问问自己是否一次需要所有这些数据。也许您在任何给定时间只需要其中的一部分,并且在某些情况下您不使用某些(或者可能是大部分)数据?如果这是可能的,我建议您在需要时按需计算数据,并仅保留基于内存的缓存以供当前会话中的未来需求使用。

否则,如果您确实需要在给定时间的所有数据,则需要在此处进行权衡。磁盘大小和处理时间之间的权衡。您可以使用某种算法缩小数据,但这会以处理时间为代价。另一方面,您可以序列化您的数据对象并将其按原样保存到磁盘。更少的时间,更多的磁盘空间。

您的场景的另一个解决方案可能是仅使用数据库和游标(顶部 sqlite 上的房间)。我不完全知道您要做什么,但是您的数组可以很容易地建模到数据库中。根据需要为单行建模,并将数组的外部索引添加到该模型中。然后将模型保存到数据库中,如果是数据库,则可能使外部索引字段成为主键。

不管我写了什么,试着想想如果你真的需要这些数据持久化在你的客户端上,也许你可以把它存储在服务器端?如果是这样,还有其他存储和访问解决方案不包含在 Android 客户端。


推荐阅读