android保持记忆饥饿的bakground服务

时间:2013-02-13 09:46:53

标签: android memory service android-service

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

1 个答案:

答案 0 :(得分:0)

  

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

考虑下载并存储400MiB SQLite数据库以及在服务器上准备数据库的文档。

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

  

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

没有

  

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

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