在我的应用程序中,我需要下载、处理和存储(在 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 看起来更加稳定。