0

在我的应用程序中,我需要下载、处理和存储(在 SQLite 中)大约 400MiB 的 HTML 文档。问题在于将这么多数据插入 sqlite(约 60k 插入)需要很长时间。我使用事务和预编译语句,但仍然需要很多时间。在低端手机上,最多可能需要两个小时。高端的至少需要 10-12 分钟。

所有这一切都是在一个 中完成的IntentService,所以它可以在应用程序在后台运行时继续。为了加快速度,我largeHeap在清单中要求最多,并根据 VM 可用的内存设置事务大小。多亏了这一点,该服务可以轻松占用 100MiB 的 RAM。因此,该服务在应用程序进入后台后不久就被终止/暂停。我startForeground在中使用Service并显示下载进度,但没有帮助。

即使在 HTC One X 等高端手机上,即使系统在此过程中拥有超过 200MiB 的可用 RAM,也会发生这种情况。

有没有办法保护这个需要内存的服务不被系统杀死?目前,该进程看起来像是重新启动并且正在循环处理一个段,因为系统在完成该段之前就终止了。设置较小的事务大小将减少内存消耗,但会增加时间,在高端手机上超过 25 分钟是不可接受的。

编辑: 这主要是在 Android 4 和更新版本上的问题。Android 2.3.3 看起来更加稳定。

4

1 回答 1

0

在我的应用程序中,我需要下载、处理和存储(在 SQLite 中)大约 400MiB 的 HTML 文档。

考虑下载和存储一个 400MiB 的 SQLite 数据库和文档,其中数据库是在服务器上准备的。

此外,请仅下载该数据库并将其存储在外部存储中,至少对于 Android 2.x 设备。

有没有办法保护这个需要内存的服务不被系统杀死?

不。

几个月前,我尝试了存储选项并将这些文档存储为文件被丢弃,因为它大约有 6 万个(是的,60 个)文档,即文件。

这并不能解释为什么您认为 400MiB 的数据库优于包含 60,000 个文件的目录结构。

于 2013-02-13T12:45:11.287 回答