【发布时间】:2020-08-29 07:10:38
【问题描述】:
Android 应用罕见的生产越界异常。
我的生产应用有时会出现罕见的越界异常崩溃,这种情况仅发生在三星 Galaxy Tab A (2016)、2048 MB RAM、Android 8.1 上。我无法正确诊断哪个索引是 OOB。我也看不出任何索引怎么可能是错误的。我错过了一些明显的东西,有人可以帮忙吗?
该应用有 1.0、1.1、1.2 和 1.3 版本。
在 3 月 30 日的 v 1.0 中,以及本周在 5 月 11 日的 v 1.2 中,都有关于这种情况的崩溃报告,
虽然我无法诊断它,但我尝试了一些修复 1.0 3 月 30 日崩溃的问题。这些“修复”在 1.2 版中有效。因此,继续前进,本周 5 月 11 日,1.2 发生了类似的崩溃(实际上几个小时内发生了 5 次崩溃,都在同一台设备上)。
代码是:
public Bitmap[][] balloonBitmap = new Bitmap[6][6];
public int[] dynamicObjectRId = new int[10];
for (int j = 1; j <= totalNoOfDynamicImages; j++) {
// PROD CRASH March 30th: OOB was on the next line
**balloonBitmap[correctOptionColourNo][j] = ImageUtil.loadImage(res, db.dynamicObjectRId[j],
dynamicImageWidthQT3, dynamicImageHeightQT3)**;
// PROD CRASH May 11th seems to be on this line:
*byteCountforBitmaps += balloonBitmap[correctOptionColourNo][j].getByteCount();*
}
我尝试的修复是在方法的前面完成的:(活在 v1.2 中)
if ((correctOptionColourNo < 0) || (correctOptionColourNo > 5)) {
correctOptionColourNo = 3;
}
So correctOptionColourNo should be ok, not OOB.
5 月 11 日的 OOB 似乎在下一个声明中:
byteCountforBitmaps += balloonBitmap[correctOptionColourNo][j].getByteCount();
但是,我不确定我是否可以完全相信这一点,因为前面的陈述肯定会首先 OOB。无论如何,我的 v 1.2 代码备份指向这行代码——我只是不相信它。但无论哪一行是实际的违规代码,它仍然是同一个问题,哪个索引是 OOB,为什么会发生?
【问题讨论】:
标签: android indexoutofboundsexception production