如果是anr 了会出现:
ActivityManager: ANR in com.xxxx.moblie (com.xxxx.moblie/.ui.MainActivity) (进程名)
关键字:ANR in
但是我遇到一个问题就是可以搜索到Anr 但是没有anr in整个log里面
还是按照正常的流程:没有event log 或者anr log就取5-10s之内的异常情况查看
在这个时间段内看到:
09-04 10:39:37.440 2900 2915 I ayonic.smartco: Background young concurrent copying GC freed 163935(8500KB) AllocSpace objects, 455(9100KB) LOS objects, 49% free, 18MB/35MB, paused 230us total 118.902ms
参考:https://www.cnpython.com/java/284891
观察与分析;注意:
上述步骤中描述的问题并不总是发生。但是,当我试图复制它时,它会在应用程序运行的一半时间内发生
我使用档案器运行我的应用程序,同时再现问题,在上述所有步骤中,从开始到结束,内存消耗保持在同一水平
请记住,我在一个只有3GB内存的小米A2 Lite设备中看到并再现了这个问题。我没有尝试在任何其他设备上复制它
出现此问题的“活动”包含一些包含许多图像的视图。当我没有用任何图像填充活动布局中的某些视图时,上面的日志消息会报告更多的可用内存百分比。这个问题有时仍然会出现,但你必须让手机闲置更长的时间,才能让应用程序冻结。此外,图像的大小越大,该问题越容易再现
我的结论:
我观察到,当我收到上述日志消息时,可用内存百分比逐渐降低,当达到低于60%的值时,应用程序开始冻结。因此,我假设设备的内存不能处理那么多数据,这就是为什么垃圾收集器为了优化目的不断重新分配内存。当然,最简单的解决方案是使用内存更多的设备,或者使用更少更小的图像,但我更喜欢更健壮的解决方案
问题:
我想知道是否有其他人在他们的应用程序中观察到这种行为,以及他们是如何处理的
开始时,我收到以“后台并发复制GC释放”开头的日志消息(请参见步骤3),在收到一组日志消息后,我收到两条消息(请参见步骤4),其中第一条消息以“后台并发复制GC释放”开头,第二条消息以“后台年轻并发复制GC释放”开头.这是不是意味着什么不同,或者我应该忽略这个变化
有没有其他工具可以帮助我进一步调查此事
核心:我解决了这个问题,结果是我的一个同事创建了一个新线程,即使在空闲时也能保持活动状态。结果,出现消息“Background young concurrent copying GC freed”,设备逐渐开始耗尽内存。因此,对于任何观察到相同消息或行为的人,我建议他们分析检查应用程序的内存消耗,尤其是多线程功能
核心应用卡顿,内存GC问题