当前位置: 首页 > 知识库问答 >
问题:

"后台并发复制GC释放"日志消息后,应用程序空闲时冻结

洪飞驰
2023-03-14

重现问题的步骤:

我重现这个问题的方式是

  1. 我运行我的android应用程序

后台并发复制GC释放237478(18MB)AllocSpace对象,52(1756KB)LOS对象,69%空闲,5507KB/17MB,暂停217us总计164.170ms

后台并发复制GC释放257288(11MB)AllocSpace对象,0(0B)LOS对象,66%自由,6204KB/18MB,暂停86us总计165.671ms

背景年轻的并发复制GC释放217214(10MB)AllocSpace对象,0(0B)LOS对象,56%自由,8108KB/18MB,暂停112我们总共129.379ms

观察

>

我已经使用分析器运行了我的应用程序,同时重现了问题,在上述所有步骤中,从开始到结束,内存消耗保持在同一水平。

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

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

我的结论是:

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

问题:

>

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

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

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

  • 共有2个答案

    彭鸿文
    2023-03-14

    当同样的情况发生在我身上时,我注意到当我尝试使用我的ListenerRegistrations时,例如,再次在firebase中监听数据;

    private var dataListener: ListenerRegistration? = null
    

    在操作该对象之前,以

    dataListener?.remove()
    dataListener= null
    

    去做吧。现在你可以为了不同或相同的目的再次使用这个物体

    丌官星渊
    2023-03-14

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

     类似资料:
    • 是否可以在不打开应用程序的情况下发送whatsApp消息,在后台发送,就像使用以下方式发送短信: 如果是,怎么做?我尝试的代码打开了应用程序(意图): 或者是否可以打开应用程序,发送消息到给定的地址,然后关闭它? 谢谢!

    • 我可能已经阅读了所有其他与此相关的SO线程,但我找不到答案,而且在Android监视器中也没有日志跟踪。有人对此有提示吗?

    • 我有一个博览会应用程序,我需要在后台运行地理Geofence,即使应用程序关闭。我得到的纬度和经度发送通过消息推送这样从C#应用程序。 PushBody=数据。说明“[ 任务是,如果手机位于提供的坐标中,我需要显示推送通知 我的App.js档案是这样的 我已经取得了权限,我需要一个解决方案,在后台运行位置服务,并显示推送通知,如果手机是在纬度和经度之间,我收到推送通知 如果有人帮我,我会非常感激的

    • 这个问题与前一个问题有关:代号一-每五分钟通知用户一些事情 我发现当应用程序处于后台或智能手机空闲时,无法正常工作。 考虑以下代码(在Android上测试): 问题是,当应用程序打开播放,之后应用程序自动进入后台,智能手机在几秒钟后(根据Android设置)变得空闲(这意味着黑屏),并且五分钟后不调用方法。当我唤醒智能手机(按下电源按钮并在屏幕上移动一根手指)时,只有在按下“主页”按钮并将应用程序

    • 来自Firebase网站上的文档:https://firebase.google.com/docs/cloud-messaging/downstream 当您的应用处于后台时传递的通知。在这种情况下,通知会传递到设备的系统托盘。默认情况下,用户单击通知会打开应用启动器。 当我的应用程序收到云消息并且我的应用程序在后台时,如果我需要做些什么。 是否可以在自定义BroadcastReceiver或服务

    • 但当应用程序在后台,我得到通知在系统托盘。当我点击控件时,它会转到主活动。而当我解析时,我只得到这个关键数据-、、、。 如何从获取通知消息标题和系统托盘中可见的消息? 我正在使用FCM控制台发送通知,我没有我的专用服务器这样做。