2011-09-01 104 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會導致一些奇怪的內部狀態沒有被檢查並拋出錯誤。

相關問題