2014-10-29 100 views

回答

9

爲什麼你想要這個監聽器。如果你只是想知道,如果您的應用程序運行內存只是檢查:

釋放內存,內存變緊

在您的應用程序生命週期的任何階段,onTrimMemory()回調也告訴你當整體設備內存越來越低。你應該通過進一步釋放基於()由onTrimMemory交付以下內存資源水平作出迴應:

  • TRIM_MEMORY_RUNNING_MODERATE 您的應用程序正在運行,並且沒有考慮killable,但在設備運行內存不足,系統正在積極殺害LRU緩存中的進程。
  • TRIM_MEMORY_RUNNING_LOW 您的應用程序正在運行,但不被認爲可以殺死,但是設備在內存上的運行要低得多,所以您應該釋放未使用的資源以提高系統性能(這會直接影響應用程序的性能)。
  • TRIM_MEMORY_RUNNING_CRITICAL 您的應用程序仍在運行,但系統已經殺死了LRU緩存中的大部分進程,因此您應該立即釋放所有非關鍵資源。如果系統無法回收足夠數量的RAM,它將清除所有的LRU緩存,並開始殺死系統希望保持活動的進程,例如託管正在運行的服務的進程。 此外,當你的應用程序是當前緩存,您可能會收到來自onTrimMemory以下級別()中的一個:

  • TRIM_MEMORY_BACKGROUND 在系統運行時內存不足,你的過程是接近LRU列表的開頭。雖然您的應用程序進程沒有被殺死的高風險,但系統可能已經在殺死LRU緩存中的進程。您應該釋放容易恢復的資源,以便您的過程保留在列表中,並在用戶返回到您的應用時快速恢復。

  • TRIM_MEMORY_MODERATE 系統內存不足,進程接近LRU列表的中間位置。如果系統進一步受限於內存,那麼您的進程就有可能被殺死。
  • TRIM_MEMORY_COMPLETE 系統內存不足,如果系統現在沒有恢復內存,那麼您的進程是第一個被終止的進程之一。您應該釋放對恢復應用狀態不重要的所有內容。 因爲onTrimMemory()回調已添加到API級別14中,所以可以使用onLowMemory()回調作爲舊版本的回退,這大致等同於TRIM_MEMORY_COMPLETE事件。

下面是引用鏈接https://developer.android.com/training/articles/memory.html

3

好吧,這將是雙方的Dalvik和技術不同..

基本上可以指導亞行外殼,記錄在一個跟蹤文件中的GC事件..

藝術:https://source.android.com/devices/tech/dalvik/gc-debug.html

它甚至可能是藝術和Dalvik的同亞行的命令。

當它在android studio中爲你顯示內存的圖形圖表時,內存監視器工具會插入此內存中。

在編程上,可能會更困難..看看FB如何執行它們的性能工具,因爲我相信他們正在從本地C/C++端執行GC事件計數,並將它們放在flatbuffer中用於其Java代碼剖析工具代碼訪問..