2011-09-01 107 views
2

我定义了一个AsyncTask并从MapView类中创建一个实例。除非Android决定终止窗口,否则一切都可以完美运行,然后当我尝试重新打开应用程序时,应用程序会崩溃,同时出现AsyncTask的NoClassDefFoundError错误。我也尝试使AsyncTask类为静态,但没有改变。在WIN死亡之后Android应用程序崩溃java.lang.NoClassDefFoundError

我已经测试过好几次了,我很确信这次事故是由于之前被杀的活动造成的。

[更新]我没有发布堆栈跟踪,因为我没有看到任何相关信息。我做了一些更多的测试,现在我在日志中看到的东西,可以是一个线索:

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):先前失败的一流拒绝重新初始化 让我觉得它来自以前的错误,但我没有看到日志中记录的其他堆栈跟踪或错误报告。

+0

请编辑您的问题,并添加您的代码以及堆栈跟踪导致崩溃。没有这个,很难帮助你。 – elevine

+1

我解决了这个问题。 我在发布到处理程序的runnable内部创建了一个AsyncTask。我之前没有遇到任何问题,而且我仍然在某些地方使用它,但出于某种原因,当它从我的Activity的onCreate方法调用时,AsyncTask在WIN DEATH之后失败(但未报告错误日志)和下面的AsyncTasks被拒绝。如果我,而不是使用处理程序,并直接创建AsyncTask,一切正常,甚至一些AsyncTasks后创建并张贴到处理程序... – martin

回答

2

我解决了UI线程问题

getActivity().runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      asynTask = new LoadWebAsynTask(); 
      asynTask.execute(); 
     } 
    }); 
+0

有点迟了,但这实际上是解决方案。我无法提供代码,因为我无法再访问它。为了完成这个响应,我推荐阅读[AsyncTask参考文档](http://developer.android.com/reference/android/os/AsyncTask.html)中的“Threading rules”一节。 – martin

2

我需要一个堆栈跟踪来确定,但我认为你的问题类似于描述in this other question

类加载器未必能找到您的AsyncTask类 - 这是在加载类时或在启动支持AsyncTask的线程启动期间引发的一些错误,这会阻止类加载器加载类。

我猜测WIN DEATH会导致一些奇怪的内部状态没有被检查并抛出错误。

相关问题