我定义了一个 AsyncTask 并从 MapView 类内部创建了一个实例。一切都很完美,除非 Android 决定终止窗口,然后当我尝试重新打开 Activity 时,应用程序崩溃,并出现 AsyncTask 的 NoClassDefFoundError 错误。我还尝试将 AsyncTask 类设为静态,但没有任何改变。
我已经对其进行了多次测试,并且我非常有信心崩溃是由于之前的 Activity 被终止造成的。
[更新]我没有发布堆栈跟踪,因为我没有看到任何相关内容。我做了更多测试,现在我在日志中看到一些可以作为线索的内容:
I/ActivityManager( 144): Displayed activity com.myorg.myApp/.MyActivity: 4456 ms (total 4456 ms)
I/dalvikvm( 3413): **Rejecting re-init on previously-failed class** Lcom/myorg/myApp/MyMapView$MyAsyncTask; v=0x0
D/AndroidRuntime( 3413): Shutting down VM
W/dalvikvm( 3413): threadid=1: thread exiting with uncaught exception (group=0x400207e8)
E/AndroidRuntime( 3413): FATAL EXCEPTION: main
E/AndroidRuntime( 3413): java.lang.NoClassDefFoundError: com.myorg.myApp.MyMapView$MyAsyncTask
E/AndroidRuntime( 3413): at com.myorg.myApp.MyMapView$4.run(MyMapView.java:169)
E/AndroidRuntime( 3413): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 3413): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 3413): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 3413): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 3413): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3413): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 3413): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 3413): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 3413): at dalvik.system.NativeStart.main(Native Method)
该行:I/dalvikvm(3413):拒绝对先前失败的类进行重新初始化 让我认为它来自之前的错误,但我在日志中没有看到其他堆栈跟踪或报告的错误。
最佳答案
我在 UI Thread 中解决了这个问题
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
asynTask = new LoadWebAsynTask();
asynTask.execute();
}
});
关于Android 应用程序在 WIN DEATH 后崩溃并出现 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270562/