很像Anr的anr

如果是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

  1. 如果我再等一段时间,我会一直收到上面的两条消息,如果我触摸屏幕,任何东西都无法交互,整个应用程序似乎都冻结了。此外,设备的“主页”&;“后退”按钮不起任何作用。如果我在尝试再次最大化应用程序时将其最小化,则会有很大的延迟,当应用程序最终打开时,所有内容都不响应(按钮不起任何作用,甚至无法滚动)。所以,我被迫关闭了这个应用程序

观察与分析;注意:

  • 上述步骤中描述的问题并不总是发生。但是,当我试图复制它时,它会在应用程序运行的一半时间内发生

  • 我使用档案器运行我的应用程序,同时再现问题,在上述所有步骤中,从开始到结束,内存消耗保持在同一水平

  • 请记住,我在一个只有3GB内存的小米A2 Lite设备中看到并再现了这个问题。我没有尝试在任何其他设备上复制它

  • 出现此问题的“活动”包含一些包含许多图像的视图。当我没有用任何图像填充活动布局中的某些视图时,上面的日志消息会报告更多的可用内存百分比。这个问题有时仍然会出现,但你必须让手机闲置更长的时间,才能让应用程序冻结。此外,图像的大小越大,该问题越容易再现

我的结论:

我观察到,当我收到上述日志消息时,可用内存百分比逐渐降低,当达到低于60%的值时,应用程序开始冻结。因此,我假设设备的内存不能处理那么多数据,这就是为什么垃圾收集器为了优化目的不断重新分配内存。当然,最简单的解决方案是使用内存更多的设备,或者使用更少更小的图像,但我更喜欢更健壮的解决方案

问题:

  1. 我想知道是否有其他人在他们的应用程序中观察到这种行为,以及他们是如何处理的

  2. 开始时,我收到以“后台并发复制GC释放”开头的日志消息(请参见步骤3),在收到一组日志消息后,我收到两条消息(请参见步骤4),其中第一条消息以“后台并发复制GC释放”开头,第二条消息以“后台年轻并发复制GC释放”开头.这是不是意味着什么不同,或者我应该忽略这个变化

  3. 有没有其他工具可以帮助我进一步调查此事

  4. 核心:我解决了这个问题,结果是我的一个同事创建了一个新线程,即使在空闲时也能保持活动状态。结果,出现消息“Background young concurrent copying GC freed”,设备逐渐开始耗尽内存。因此,对于任何观察到相同消息或行为的人,我建议他们分析检查应用程序的内存消耗,尤其是多线程功能

  5. 核心应用卡顿,内存GC问题

你可能感兴趣的:(Android)