當我想在應用程序中模擬內存不足時發生這種情況。 Crashlytics有很多崩潰消息,說明最終用戶正在運行OOM崩潰,並且無法使用我的設備(Samsung S4)重現它們。我只是碰撞,沒有其他來自crashlytics的痕跡。在android中模擬內存不足
我想知道是否有人有辦法重現他們的測試(沒有任何代碼更改首選)。
我看到這個:Testing Android for Out of Memory scenarios,但還沒有機會運行它。
任何幫助,將不勝感激。
當我想在應用程序中模擬內存不足時發生這種情況。 Crashlytics有很多崩潰消息,說明最終用戶正在運行OOM崩潰,並且無法使用我的設備(Samsung S4)重現它們。我只是碰撞,沒有其他來自crashlytics的痕跡。在android中模擬內存不足
我想知道是否有人有辦法重現他們的測試(沒有任何代碼更改首選)。
我看到這個:Testing Android for Out of Memory scenarios,但還沒有機會運行它。
任何幫助,將不勝感激。
我希望我能夠正確地理解這個問題:如果您不想更改很多設置,有一種非常簡單的方法。進入開發選項,並使其「沒有後臺進程」。現在你可以退出應用程序,啓動一個新的,並回到你的原始,它會從內存不足
否OP請求如何模擬場景設備內存不足(不太可能),或者應用程序通過泄漏內存消耗了它自己的堆,導致進一步的內存分配失敗以及應用程序崩潰(更可能)。 – dcow
我能夠模擬OOM錯誤,通過替換圖像列表應用非常大的圖像。 5MB而不是通常的250K。維基媒體有很多大圖片可以使用。 https://commons.wikimedia.org/wiki/File:Snake_River_(5mb).jpg
有很多方法可以導致OOM。
使用一個非常大的圖像(順便說一句,這個用例是應用程序中許多真正的OOM問題的來源)。我在我的Recycler中替換了1個元素的圖像,所以當我滾動到它時,它會加載大圖像(然後我可以用這種方式驅動測試)。
創建一個循環,將對象分配給內存。你可以在一個循環中「新增」一堆對象,並以這種方式運行它。如果將足夠的字符串或int對象分配到單個數組中,則最終會運行OOM(這也是逐漸構建爲OOM條件的好方法)。字符串會導致OOM更快然後整數(但是將足夠的對象添加到數組中,並且最終會變得太大)。
如果你人工告訴應用程序內存不足,你打算如何調試真正的問題?確實有分析堆的工具,但它們在人工條件下不會提供太多價值,因爲一切看起來都很正常...... – dcow
不,我不打算人爲做它。這就是爲什麼我說 - 沒有任何代碼更改。我想問的是,如果喜歡打開很多應用程序並在它們之間切換或以其他方式來實現這一點(如任何設置或可以使用的任何其他應用程序) – Akshat