Android UI行为有时会抛出NullPointerException

时间:2011-06-28 11:11:59

标签: android android-layout nullpointerexception android-ui

我们有一个稳定的Android应用程序,可以运行数天而不会出现任何错误。偶尔我们遇到应用程序崩溃,每次看一下堆栈跟踪看起来都是这样的:

06-05 12:05:58.939: DEBUG/AndroidRuntime(3149): Shutting down VM
06-05 12:05:58.939: WARN/dalvikvm(3149): threadid=1: thread exiting with uncaught exception (group=0x40028a00)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149): FATAL EXCEPTION: main
06-05 12:05:58.949: ERROR/AndroidRuntime(3149): java.lang.NullPointerException
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView.obtainView(AbsListView.java:1304)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     atandroid.widget.ListView.makeAndAddView(ListView.java:1727)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.ListView.fillDown(ListView.java:652)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.ListView.fillGap(ListView.java:623)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:2485)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Handler.handleCallback(Handler.java:587)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.os.Looper.loop(Looper.java:142)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at android.app.ActivityThread.main(ActivityThread.java:4914)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at java.lang.reflect.Method.invokeNative(Native Method)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at java.lang.reflect.Method.invoke(Method.java:521)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-05 12:05:58.949: ERROR/AndroidRuntime(3149):     at dalvik.system.NativeStart.main(Native Method)

请注意,只有Android内部对象的引用。

还有其他时间我们经历过这种情况,其他堆栈跟踪最终也仅使用Android内部堆栈跟踪抛出NPE,而没有任何引用我们中的任何一个对象或方法,在这种情况下它是小部件,并且我最后一次看到这样的NPE来自LayoutView,我还发现了另一个question NPE已经在GroupView中被抛出。

关键是应用程序正常运行,我可以尝试使用相同的场景重现崩溃一千次而不会发生这种情况,但偶尔会发生这种情况。

有没有其他人经历过这个? 它可能与我们布局UI组件的方式有关吗? 即使你有一个想法,请分享......

谢谢, Adam Zehavi。

1 个答案:

答案 0 :(得分:2)

最可能的原因是,在您调用ListView之前,您的setListAdapter()正在更新。由于间歇性,我建议你在这里遇到一个线程问题:一个线程导致你的ListView在另一个线程调用setListAdapter()之前被更新。