2014-01-23 40 views
0

有点小问题,但在分析堆栈跟踪我正确地认为堆栈跟踪中的第一个或最顶端的项目是最新的? 而在我的情况是'performDestroyActivity'的原因或崩溃的结果?Android:USB断开连接导致应用程序崩溃

调试我的崩溃原因的下一步应该是什么?

这是我BugSense报告

java.lang.RuntimeException: Unable to destroy activity {ca.foo.awesomeapp/ca.foo.awesomeapp.MainActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3497) 
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3515) 
at android.app.ActivityThread.access$1400(ActivityThread.java:135) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1249) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5017) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException 
at com.wiley.wroxaccessories.WroxAccessory.disconnect(WroxAccessory.java:79) 
at ca.foo.awesomeapp.MainActivity.onDestroy(MainActivity.java:179) 
at android.app.Activity.performDestroy(Activity.java:5403) 
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1117) 
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3484) 
... 11 more 
+0

向我们展示您的活动中的onDestroy方法。 onDestroy(MainActivity.java:179)是问题出在你的活动中的地方。无论disconnect()方法调用是什么导致你的空指针。只需在堆栈轨迹中稍微查看一下即可看到。 – dymmeh

回答

0

首先,logcat的行追加到文件的底部。所以最下面的堆栈跟踪是最近的。最上面的是最先发生的(“最近的”是最后发生的)。

要分析一个堆栈跟踪,基本上首先阅读每一行,直到你看到你的应用程序中的一个对象。在堆栈跟踪中,包含应用程序信息的最上面一行是崩溃的“根源”,而您的应用程序可能包含由您的代码行(或继承方法的代码行)继承或调用的对象。

在你的情况,这是你的罪魁祸首:

at ca.foo.awesomeapp.MainActivity.onDestroy(MainActivity.java:179) 

这应该告诉你的“的onDestroy”法内“MainActivity” 179行,您呼叫的东西,导致空指针异常。直接在它上面的那一行告诉你它在什么地方发生了它的代码之前 - “WroxAccessory” - 它看起来有一个空对象,这就是它停止的地方。否则,您会看到更多关于此行的线条:

at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException 

这是控制您应用程序的主要“活套”。所以上面这通常是没有用的(因为它不太可能是一个bug,但是代码也在运行并执行代码,所以它是跟踪的一部分)。

+0

谢谢,但我的一部分困惑是,我认为onDestroy处理程序应该只在您的应用程序正在退出时被调用...在我的情况下,我不希望它退出时断开USB –