在Android中,我正确地进行了onTrimMemory调用,并且我做出了适当的反应。当隐藏UI时,我释放保存的UI元素并将内存使用量降低50%。
我遇到的问题是每次onTrimMemory调用后Android系统都没有运行垃圾收集器。我可以在logcat中看到这个。因此,我将获得一些onTrimMemory(CRITICAL)调用,然后最终我的后台进程将被终止。但是,如果我使用Android Studio手动启动GC,该应用程序将释放50%的内存回系统,大大增加了它的生存机会。
我可以添加一些System.GC调用,但我不知道Android将如何/为什么一直告诉我释放内存,但拒绝运行垃圾收集器。 (我仍然需要测试更多设备,因为我不知道这是否是特定于设备的问题。)
答案 0 :(得分:0)
为什么不将WeakReference用于非关键资源?
答案 1 :(得分:0)
这看起来是特定手机的问题。我无法在Nexus设备上重现这一点。在我发布对象的onTrimMemory调用之后,我的Nexus设备执行垃圾收集器传递。