繁体   English   中英

我想在服务重启期间保留我的数据,但是我的数据不是简单的变量名-值或表格式。 我应该怎么做?

[英]I want to preserve my data during service restart, but my data is not in simple variable name-value or table format. How should I go about this?

我想在服务重启期间保留数据,该服务使用{arrayarray of integers}和其他一些变量的arraylist。 由于它大约为40-60 MB,因此我不希望每次服务重新启动时都生成它(这会花费很多时间); 我想一次生成数据,也许要复制一次以便下次服务重启。 如何做呢?

在建议将数据写入文件之前,请考虑如何将类似于多维数组(3d或更高版本)的数据结构放入文件中; 完成后,可能还会花费大量时间阅读。

您可以尝试将生成的数据写入文件中。 然后,在下次服务重新启动时,您只需从文件中读取该内容即可。

如果您需要持久数据,则将其放入数据库https://developer.android.com/guide/topics/data/data-storage

或尝试一些对象数据库,例如http://objectbox.io/

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

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

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

针对您的方案的另一种解决方案可能是仅使用一个数据库和一个游标(位于顶部sqlite上的房间)。 我不完全知道您要做什么,但是可以轻松地将数组建模为数据库。 根据需要对单个行进行建模,然后向该模型添加数组的外部索引。 然后将模型保存到数据库中,从而可能使外部索引字段成为数据库的主键。

不管我写了什么,请尝试考虑是否确实需要在客户端上持久存储此数据,也许可以将其存储在服务器端? 如果是这样,还有其他存储和访问解决方案未包含在Android客户端中。

谢谢大家回答这个问题。

这是我最终解决的问题:

  • 我没有将结构用作应用程序的一部分,而是将其变成了一个工具,该工具将准备要与主应用程序一起使用的数据。 这样做还消除了有关服务重新启动的担忧。
  • 该工具将首先从输入文件中读取所有字符串。
  • 然后将它们一次全部放入结构中。(这是我所怀疑的部分,并提出了有关此问题的信息。由于所有数据都已放入此处的结构中,因此程序一旦终止,该结构化数据无法使用。)
  • 现在,我准备了另一种结构来将该数据放入文件中,并将所有这些数据放入文件中,这样我就不需要一次又一次地读取所有输入文件,而只需几行。
  • 然后我想,为什么要花时间“读取”文件,而我却可以将其硬编码到应用程序中。 因此,作为该预处理工具的最后一步,我将其设置为具有switch(input){case X:return Y}的类。
  • 现在,我只需要将此类放入我要制作的应用中即可。

我知道这听起来很抽象,甚至延伸了抽象的概念,如果您想了解细节,请告诉我。 我也包括“工具”的链接。 请访问,让我知道是否会有更好的方法。

PS此工具可能还存在错误,如果您发现了,请让我知道修复它们。

PPS链接: Kompressor工具

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM