Получение NoClassDefFoundError: android.os.AsyncTask

Эта проблема немного беспокоила меня, и я не могу найти удовлетворительное решение.

Много раз (не всегда) при создании конкретного объекта на эмуляторе Android я получаю NoClassDefFoundError: android.os.AsynchTask.

Я пробовал много подходов к удалению и повторному добавлению внешних библиотек несколько раз, вытирая эмулятор, перезагружая IntelliJ (работал один раз, но потом получил ту же ошибку.) На этом этапе все, что я пытаюсь сделать, это построить большинство barebone AsyncTask, и я все еще Получить ошибку.

Вот сообщение об ошибке:

08-06 16:24:43.546: ERROR/AndroidRuntime(331): FATAL EXCEPTION: main java.lang.NoClassDefFoundError: android.os.AsyncTask at com.myapp.activity.StatisticsActivity.onCreate(StatisticsActivity.java:79) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.access$2300(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at dalvik.system.NativeStart.main(Native Method) 

Эмулятор работает 2,2, мой minSDK – 8. Вот код нарушения:

 public class StatisticsActivity extends TabActivity implements AsynchDataDisplay{ ... public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.statistics); StatisticsProvider sp = new StatisticsProvider(); ... } } 

Объект StatisticsProvider:

  private class StatisticsProvider extends AsyncTask{ @Override protected Object doInBackground(Object... objects) { return null; } } 

ОК, похоже, что это проблема с одной из версий Google Play Services. См. https://code.google.com/p/android/issues/detail?id=81083.

Похоже, что работа вокруг может заключаться в добавлении:

 try { Class.forName("android.os.AsyncTask"); } catch(Throwable ignore) { // ignored } 

В ваше Application#onCreate()

Если у вас еще нет класса Application, тогда создайте класс, который простирается от android.app.Application и

  1. Добавьте код выше в свой #onCreate()
  2. Добавьте ссылку на свой класс приложения в элемент приложения вашего AndroidManifest.
 <application android:icon="@drawable/icon_game_launcher" android:label="@string/app_name" android:name="au.com.mycompany.myapp.MyApplication"> 

Я думаю, что я его взломал.

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

Мораль, возьмите отпуск и вернитесь свежими глазами.

Попробуйте добавить простой конструктор в StatisticsProvider и проверьте.