2012-11-06 29 views
11

我需要測試應用程序序列化\反序列化在接下來的情況:如何通過Android的GC模擬應用程序的查殺

  • 應用程序在後臺有很多的時間(待機模式),並用GC殺害;
  • 應用程序在背景中,由於資源(memory \ cp)缺乏而被GC殺死;

在某些設備上,它可以通過啓動1-2場比賽來模擬。 但是在具有1GB內存的四核設備上,4-10重型遊戲非常非常困難,並且需要很長時間。

我嘗試實施一些演示,其中對資源的模擬負載:

  • 創建位圖陣列
  • 創建對象數組
  • 推出了很多服務
  • 推出了很多活動

但沒有結果,應用程序仍然有效(即使在舊設備上),我的演示程序與OutOfMemoryEx ception。

如何在演示應用程序中模擬高負載?

謝謝!

+4

在設置「不保留活動」下有一個開發者選項,用於在用戶離開活動後立即開始活動。 – Ifor

+1

我得到了那個選項@Ifor在4.0 Android上提到但是在2.3我認爲沒有(我升級了它) – HericDenis

+0

@Ifor,謝謝,但它完全不同。如果'不保留活動'將被調用onDestroy和應用程序將正常關閉(如常見的應用程序退出)。 – nister

回答

2

那麼,「GC」實際上是濫用「內存不足殺手」,並殺死應用程序,如果通過信號9。在根植設備,你應該能夠調用kill(1)命令從shell或kill(2)功能從本地庫我不確定它是否與Java綁定),並在需要時終止應用程序。

系統通常會在Activity的背景下調用onStop,並且會在沒有進一步警告的情況下殺死應用程序並且沒有機會做出反應。所以,如果你離開應用程序並殺死它,那麼模擬它被OOM殺死是合適的。

+0

這看起來像一個真相,我想也是一樣。但是如果你檢查活動回調和日誌,你會看到完全不同的行爲。當你從任務管理器殺死應用程序,它看起來像正常退出應用程序(與onDestroy和正確的完成)。 – nister

+2

@nister:當你從任務管理器中殺死它時,它可能是如此。但問題是當應用程序因內存不足而死亡時會發生什麼。 –

+0

當Android由於內存限制而殺死應用程序,然後應用程序被用戶打開時,會打開最後一個活動。手動殺死應用程序時,只會恢復主要活動。 –

0

在Play商店中安裝任何內存清潔器。我安裝這個:easymemorycleaner

一旦你清理你的記憶。你存儲在內存中的變量將會消失。除非您將數據存儲在Parcelable中。它會持久。

相關問題