2012-03-21 65 views
1

我的應用程序是在前臺運行的後臺服務。在內存不足的情況下,我的一些處理線程在未重啓應用程序的情況下被殺死。這造成了非常奇怪的行爲。當我的進程被殺死之前,我希望在內存不足時提醒操作系統。這將允許我釋放內存或重新啓動我的應用程序。我似乎無法找到針對這種情況的廣播或通知。如何確定設備在Android上的內存不足時

+0

好問題,我也想知道如何接收低內存通知。 – paiego 2012-11-11 12:58:23

回答

1
  1. 在Android中有一個後臺服務「DeviceStorageMonitorService」持續運行,它定期檢查系統存儲目錄。
  2. 該服務維護的內存閾值是分配的內部系統內存的10%,所以如果P2是861MB,則內存閾值爲86 MB。 我們可以通過更改文件DeviceStorageMonitorService.java中的宏DEFAULT_THRESHOLD_PERCENTAGE來更改此項。
  3. 它檢查可用內存的大小與內存閾值,如果它小於閾值內存,它將廣播通知和粘性廣播意圖ACTION_DEVICE_STORAGE_LOW。 如果有完整的記憶意圖ACTION_DEVICE_STORAGE_FULL

在您的接收器中接收此廣播意圖並處理應用程序。

+0

我碰到這個好,但我想它是監視設備的內部或外部存儲而不是內存。所以你認爲如果我釋放內存或重新啓動我的應用程序,當我收到ACTION_DEVICE_STORAGE_LOW意圖它應該解決我的問題?謝謝 – null 2012-03-21 11:45:37

+0

我在那裏看着它,是的,這確實是我正在尋找的。再次感謝,希望這可以幫助別人。 – null 2012-03-21 11:51:43

+0

我覺得它應該可以解決你的問題。當你有這個意圖。你需要處理你的應用程序,因爲當內存不足時,框架會通知應用程序,如果應用程序不處理它,它將終止低優先級的進程。 – Wish 2012-03-21 11:55:44

1

我建議你在這裏閱讀「管理你的應用程序的內存」:https://developer.android.com/training/articles/memory.html。系統回調方法onTrimMemory將通知您不同的RAM使用情況,如方法參數的值所示。詳細信息請參見https://developer.android.com/reference/android/content/ComponentCallbacks2.html#onTrimMemory(int)。這種方法的描述說:當操作系統已確定這是一個過程的好時機 從它的工藝修剪不必要的內存

調用。這將會發生,例如當它在後臺運行時,並且沒有足夠的內存來保持儘可能多的後臺進程運行。 你不應該比較水平的精確值,因爲可能會新增 中間值 - 你通常要比較 如果該值大於或等於你有興趣在一個水平

檢索。在任何點處理當前修剪級別時,可以使用 ActivityManager.getMyMemoryState(RunningAppProcessInfo)。

例如,TRIM_MEMORY_COMPLETE作爲參數onTrimMemory:

公共靜態最終詮釋TRIM_MEMORY_COMPLETE等級爲 onTrimMemory(INT):進程已接近背景LRU列表的末尾,和如果沒有發現更多的內存很快就會死亡,將會是 。常量值:80(0x00000050)