这是一个很奇怪的问题,我不能为了我的生活找出问题所在。根据断点的位置,变量的作用是不同的
我有两个字符串数组,在类的顶部声明:这是在onCreate方法运行
String[] artistsURLIndexArray;
String[] artistsOnlyArray;
他们是在一个单独的线程(后台工作)都更新。我在调试中看到一切正常,数组正确更新。
后台线程我有以下代码(在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代码之前或之后运行,取决于断点。通常情况下,新的线程不会开始,直到你的线程产量。调试器正在导致你的主线程产生并因此给新线程一个运行的机会。 – BitBank 2011-12-25 22:18:37