【发布时间】:2011-12-25 22:12:53
【问题描述】:
这是一个非常奇怪的问题,我终其一生都无法弄清楚问题所在。
我有两个字符串数组,声明在类的顶部:
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 点放置断点,则不会到达断点。也“好的”。
但是,如果我在 A 点放置断点,一切都会改变。断点当然到了,现在要检查数组是否为空。我按 F8 继续(我正在使用 Eclipse),突然间,test[0] 是“不是空的!”。我还可以看到artistsOnlyArray 是正确的(不为空)。
为什么断点的出现(和位置)会导致这种行为?
【问题讨论】:
-
听起来您的后台线程在 oncreate 代码之前或之后运行,具体取决于断点。通常,在您的线程屈服之前,新线程不会启动。调试器导致你的主线程让步,因此给了新线程一个运行的机会。
标签: android debugging breakpoints