2014-01-23 4 views
0

Что-то вроде вопроса noob, но при анализе stacktrace я правильно понимаю, что первый или самый верхний элемент в stacktrace является самым последним? И в моем случае это «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 добавляет строки в конец файла. Таким образом, самая нижняя стопка - самая последняя. Самый верхний - первый (с последним «последним»).

Для анализа stacktrace, в основном, начинайте с чтения каждой строки, пока не увидите объект из своего приложения. Внутри stacktrace самая верхняя строка с информацией о вашем приложении является «корневой» причиной сбоя, в то время как ваше приложение может содержать объекты, которые были унаследованы или вызваны вашей линией (или линиями унаследованного метода) кода.

В вашем случае, это ваш виновник:

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

Это должно вам сказать, что в строке 179 «MainActivity» внутри метода «OnDestroy», вы вызываете что-то, что привело к нулевому исключением указателя , Строка, расположенная непосредственно над ней, сообщает вам, где она произошла, прежде чем она попала в ваш код - «WroxAccessory», которая, как представляется, имеет в ней нулевой объект, и именно там она останавливается. В противном случае вы увидите больше строк об этой строке:

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

Это основной «петлитель» с вашим приложением. Таким образом, выше этого, как правило, не полезно (потому что это крайне маловероятно, чтобы быть ошибкой там, но этот код также работает и выполняет ваш код, поэтому он является частью трассировки).

+0

Спасибо, но часть моей путаницы в том, что я думал, что обработчик onDestroy должен ТОЛЬКО быть вызван, когда ваше приложение уходит ... в моем случае я не хочу, чтобы он ушел, когда я отключил USB –

Смежные вопросы