0

所以我一直在努力使用我的 Android 应用程序。我对 Android 编程相当陌生,并为客户制作了应用程序。那时我为三星的 S2 和 S3 等新设备编写了它。现在我遇到了一个问题:垃圾收集。我已经阅读了一些关于机制以及如何减少 GC 的帖子,但我认为这不会有帮助。我希望有人能提示我如何处理 GC。

我的代码执行以下操作:它从名为 vTiger 的在线 CRM 下载大量数据。这是一个动态系统,因此应用程序获取大量链接数据,而不仅仅是(例如)带有用户名和密码的用户表。现在这进入 JSON 对象,我将它们拆分出来,以便我可以在这样的循环中使用所有数据:对于每个模块,获取所有记录。那么这些记录加起来大约是 5000 条(现在,仍然随着使用而增长)。

很多信息,所以我将所有信息存储到 ArrayList 和 ArrayList 中,它们是我用来保存信息的简单对象。我记得我不只是将对象写入数据库,而是在数据库过载时将它们保存在 ArrayList 中。所以我所做的是将所有这些对象(大约 5000 - 10000)保存在 ArrayLists 中,然后在 SQLite 数据库上使用 Transactions。这种方式效果很好。

但是,在模拟器/旧设备上,我得到了很多 GC_concurrent 日志记录,这意味着我的代码中有内存泄漏。我知道该设备无法将所有这些对象保存在它的内存中,但是您将如何处理呢?由于 GC,旧设备无法通过我的“同步”功能进行处理。例如,我让模拟器运行了几个小时,但它在同步进行到一半时几乎卡住了(非常、非常、非常慢)。

希望有人愿意给我一些建议,如果可能的话。提前致谢!

4

2 回答 2

0

如果您正在加载大量数据,您将获得 GC 峰值。真的没有办法解决。没有那么大的尖峰的唯一方法是将数据分块——将其分成更小的部分(可能是每个设备),并在加载更多之前对其进行处理。

于 2012-12-24T17:03:47.420 回答
0

不是一次从服务请求所有数据,而是以块的形式请求数据。这将防止内存被填满并强制进行小型 GC。

于 2012-12-24T17:04:36.970 回答