Android / Java редкое и, казалось бы, невозможное исключение, вызывающее принудительное закрытие - PullRequest
3 голосов
/ 19 апреля 2010

Мне сообщили об интересной проблеме из приложения для Android, которое я опубликовал. У меня есть двумерный массив, который я перебираю, используя два цикла for следующим образом:

for (int i = 0; i < arr.length; ++i)
{
    for (int j = 0; j < arr[i].length; ++j)
    {
        if (arr[i][j] != 0)
            // does stuff
    }
}

Проблема в том, что arr [i] [j]! = 0 создает исключение ArrayIndexOutOfBoundsException. Но очень редко. У меня есть тысячи людей, которые ежедневно используют приложение и получают около двадцати принудительных отчетов.

Это то, чего я не могу избежать, возможно, проблема с памятью телефона и т. Д., Или я могу что-то сделать, о чем я еще не думал? Спасибо.

1 Ответ

7 голосов
/ 19 апреля 2010

Это исключение не является невозможным, если у вас есть один поток, читающий массивы, в то время как второй поток их мутирует. В частности, если мутирующий поток изменяет размер фрагментов массива; например,

array[i] = new Whatever[array[i].length - 1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...