Это действительно странная проблема, и я не могу понять, в чем дело.
У меня есть два строковых массива, объявленных в верхней части класса:
String[] artistsURLIndexArray;
String[] artistsOnlyArray;
Они оба обновляются в отдельном потоке (фоновый рабочий), который запускается в методе onCreate. Я вижу в отладке, что все работает, и массивы корректно обновляются.
После фонового потока у меня есть следующий код (все еще в методе onCreate):
String[] test;
if(artistsOnlyArray == null) // point A
{
test = new String[] { "empty...", "asd" }; // point B
}
else
{
test = new String[] { "not empty!", "asd" }; // point C
}
Теперь, когда я просто "запускаю" приложение (без отладки), test[0]
"пусто ...". То есть artistsOnlyArray
является нулевым! Такого не должно быть. (Кстати, я тестирую массив test
визуально со списком.)
Если я продолжу и установлю точку останова в точке B и отладю приложение, приложение останавливается (прерывается) здесь. Это, конечно, ожидается, поскольку он утверждает, что artistsOnlyArray
равен нулю.
Если вместо этого поместить точку останова в точку C, точка останова не будет достигнута. Также «хорошо».
Если я установлю точку останова в точке А, все изменится. Конечно, точка останова достигнута, и теперь он должен проверить, является ли массив нулевым. Я нажимаю F8 для возобновления (я использую Eclipse), и внезапно test[0]
означает «не пусто!» . Я также вижу, что artistsOnlyArray
является правильным (не нулевым).
Почему появление (и положение) точки останова вызывает такое поведение?