Android-приложение аварийно завершает работу с java.lang.NoClassDefFoundError после WIN DEATH - PullRequest
2 голосов
/ 01 сентября 2011

Я определил AsyncTask и создал экземпляр внутри класса MapView. Все работает отлично, за исключением случаев, когда Android решает убить окно, затем, когда я пытаюсь повторно открыть действие, приложение вылетает с NoClassDefFoundError для моего AsyncTask. Я также пытался сделать класс AsyncTask статическим, но ничего не изменилось.

Я проверял это несколько раз, и я вполне уверен, что сбой произошел из-за ранее убитой активности.

[Update] Я не опубликовал трассировку стека, потому что не увидел ничего релевантного. Я провел еще несколько тестов и теперь вижу в журнале что-то, что может быть подсказкой:

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): Отклонение повторной инициализации в ранее неудачном классе Заставляет меня думать, что это происходит из-за предыдущей ошибки, но я не вижу других следов стека в журнале или сообщений об ошибках.

Ответы [ 2 ]

2 голосов
/ 15 марта 2014

Я решил эту проблему в потоке пользовательского интерфейса

getActivity().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            asynTask = new LoadWebAsynTask();
            asynTask.execute();
        }
    });
2 голосов
/ 01 сентября 2011

Мне понадобится трассировка стека, чтобы убедиться, но я думаю, что ваша проблема похожа на проблему, описанную в этом другом вопросе .

Не обязательно, что загрузчик классов не может найти ваш класс AsyncTask - это то, что возникает некоторая ошибка во время загрузки класса или во время запуска потока, поддерживающего AsyncTask, который не позволяет загрузчику классов загрузитьучебный класс.

Я предполагаю, что WIN DEATH вызывает какое-то странное внутреннее состояние, которое не проверяется и выдает ошибку.

...