当我想在应用程序中模拟内存不足时发生这种情况。 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