我正在启动一个服务 => 后台服务,并在 "新线程" 中启动文件检查。在日志中我得到了以下信息,服务/应用程序被暂停。
日志 : I/art: 显式并发标记扫描GC释放25935(1686KB)AllocSpace对象,13个(903KB) LOS对象,39%空闲,13MB/22MB,暂停649us总计43.569ms
这只是在SD卡的"MyData"文件夹中扫描包含一堆图片(大约20张)的文件。
**扫描 = 获取图片名称并将它们保存到字符串中。
我正在启动一个服务 => 后台服务,并在 "新线程" 中启动文件检查。在日志中我得到了以下信息,服务/应用程序被暂停。
日志 : I/art: 显式并发标记扫描GC释放25935(1686KB)AllocSpace对象,13个(903KB) LOS对象,39%空闲,13MB/22MB,暂停649us总计43.569ms
这只是在SD卡的"MyData"文件夹中扫描包含一堆图片(大约20张)的文件。
**扫描 = 获取图片名称并将它们保存到字符串中。
这意味着垃圾收集器正在执行其任务并释放内存。
如果您经常(或一直)看到这个消息,请注意您很可能分配了太多对象。一个常见的原因是在循环中分配许多(或少量大型)对象,如下面的例子:
for (int i = 0; i < 100; i++) {
Bitmap bmp = Bitmap.create(100, 100, Bitmap.Config.ARGB_4444);
}
每次我们进入这个循环,我们都会分配一百个新的Bitmap对象。
防止垃圾回收扫描的最好方法是不分配对象。当然,在Java中你必须分配对象,所以你需要确保你没有不必要地进行分配。
这里是谷歌发布的许多YouTube视频之一,其中提供了避免GC事件和正确管理内存的技巧。