2016-06-23 106 views
1

在Android中,我正確地獲取了onTrimMemory調用,並且我做出了適當的反應。當UI隱藏時,我釋放已保存的UI元素並將內存使用量降低50%。OnTrimMemory,但Android上沒有垃圾回收

我遇到的問題是Android系統在每次onTrimMemory調用後都沒有運行垃圾回收器。我可以在logcat中看到這個。所以我會得到一些onTrimMemory(CRITICAL)調用,然後最終我的後臺進程將被終止。但是,如果我使用Android Studio手動啓動GC,則應用程序會將其內存的50%釋放回系統,從而大大增加其存活的可能性。

我可以添加一些System.GC調用,但我很遺憾Android/Android爲什麼會一直告訴我釋放內存,但是拒絕運行垃圾回收器。 (我仍然需要測試更多設備,因爲我不知道這是否是設備特定問題。)

回答

0

爲什麼不使用WeakReference來處理非關鍵資源?

+0

我這樣做。問題不是內存泄漏。問題是垃圾收集器沒有運行,儘管系統知道內存不足。如果垃圾收集器不運行,WeakReference資源將不會被清理。 – Justin

0

這看起來是一個特定手機的問題。我無法在Nexus設備上重現此功能。在我釋放對象的onTrimMemory調用之後,我的Nexus設備會執行垃圾回收器傳遞。