![](/img/trans.png)
[英]I want to take pictures from a site for my mobile application, how should I go about it?
[英]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客户端中。
这是我最终解决的问题:
我知道这听起来很抽象,甚至延伸了抽象的概念,如果您想了解细节,请告诉我。 我也包括“工具”的链接。 请访问,让我知道是否会有更好的方法。
PS此工具可能还存在错误,如果您发现了,请让我知道修复它们。
PPS链接: Kompressor工具
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.