我目前正在实施我的第一个 Android 应用程序。调试和开发通常很好,但有时我在对代码进行一些更改然后从 Eclipse 环境(到虚拟设备)再次启动应用程序时遇到问题。
据我了解,新的开始会终止模拟器中我的应用程序的当前运行版本,这很好 - 但这是正确的终止吗?我的应用程序中是否引发了一些我应该处理的事件?
我为什么要问?我的问题是,对于模拟器中当前处于活动状态的大多数活动,我的应用程序会正确终止(它已经消失)并且新版本可以正常启动。但是对于我的大约 2 个活动,当它们处于活动状态并且我从 Eclipse“重新启动”我的应用程序时,我可以看到几秒钟的消息框“不幸的是 APP 已停止”,这让我知道这些活动可能需要在他们的析构函数,取消初始化某些东西或其他什么,因为终止会导致某种崩溃。如何检测这个,如何调试这个?当我再次启动该应用程序时,旧版本的调试器已断开连接,因此无济于事。我所能看到的只是 logcat 异常调用堆栈信息,但这对我帮助不大:
01-19 11:19:16.352: E/AndroidRuntime(1424): FATAL EXCEPTION: main
01-19 11:19:16.352: E/AndroidRuntime(1424): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.LoadedApk.makeApplication(LoadedApk.java:504)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4364)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.ActivityThread.access$1300(ActivityThread.java:141)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.os.Looper.loop(Looper.java:137)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.ActivityThread.main(ActivityThread.java:5039)
01-19 11:19:16.352: E/AndroidRuntime(1424): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 11:19:16.352: E/AndroidRuntime(1424): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 11:19:16.352: E/AndroidRuntime(1424): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-19 11:19:16.352: E/AndroidRuntime(1424): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-19 11:19:16.352: E/AndroidRuntime(1424): at dalvik.system.NativeStart.main(Native Method)
01-19 11:19:16.352: E/AndroidRuntime(1424): Caused by: java.lang.NullPointerException
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:379)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.LoadedApk.getClassLoader(LoadedApk.java:322)
01-19 11:19:16.352: E/AndroidRuntime(1424): at android.app.LoadedApk.makeApplication(LoadedApk.java:496)
01-19 11:19:16.352: E/AndroidRuntime(1424): ... 11 more