Android“暂停(异常X)”堆栈跟踪

时间:2012-03-07 21:14:18

标签: android

测试Android应用的人向我们提交了一个堆栈跟踪,如下所示:

Thread [<21> Thread-31] (Suspended (exception SQLiteException)) 
FooClass.bar(Foo2Class) line: 198

它指向的代码行与SQLite无关(它不是Android类,它是我的代码)。如果你想知道,它指向的代码行如下所示:

if (s_arrayList.contains(foo2))

所以我能想到的唯一例外是NullPointer ......绝对不是SQLite异常。

我的主要问题是:“暂停(例外X)”的真正含义是什么?如果异常发生在另一个线程上,为什么Android会报告此堆栈跟踪?

更新

我认为这个问题与Eclipse有关,它在检测到异常时挂起了该线程。这仍然让我无法回答这个问题,这就是为什么Eclipse在这个地方怀疑这个问题。我找到了一个相关的问题,它讨论了Eclipse的这个怪癖。你可以在这里阅读更多相关信息:

Eclipse Android Debugger - Where in my code did I cause the exception?

2 个答案:

答案 0 :(得分:1)

我可以想象更多的案例。为了追踪它,更多代码会有所帮助。但是,剩下的时间很少

检查堆栈跟踪是否真的适合您的代码版本。

检查s_arraylist的类型。它可能是一些在sqllite上进行后期绑定的特殊代码。但是,我认为这不太可能,但最好验证

检查foo2的类型。可能是它的hashcode或equals方法是直接或间接使用SqlLite。这是我的最爱。

答案 1 :(得分:1)

当你的线程抛出一个暂停 - 异常(就像在你的堆栈跟踪中一样)时,并不意味着你有一个空指针,这意味着来自其他线程的某个调用了Thread.suspend()