Android: NoClassDefFoundError android.os.AsyncTask

Начиная с пары недель, я вижу больше и больше сбоев моего приложения со следующим исключением

Fatal Exception: java.lang.NoClassDefFoundError android.os.AsyncTask

Этот код запускается в течение месяца без каких-либо проблем, и теперь он кажется неудачным на некоторых устройствах (75% android 2.3.x и 25% android 4.0.3). Это не удается, когда я создаю новый экземпляр класса, который расширяет AsyncTask.

Я создаю этот класс из потока пользовательского интерфейса.

Как этот класс не может быть найден, как он определен в SDK?

Solutions Collecting From Web of "Android: NoClassDefFoundError android.os.AsyncTask"

Да, похоже, что это проблема с одной из версий 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()

Это гарантирует, что корневой загрузчик классов загрузит AsyncTask так, чтобы он был доступен из Play Services.

Это похоже на еще одну ошибку Google Play Services …

https://groups.google.com/forum/#!topic/google-admob-ads-sdk/_x12qmjWI7M

Изменить: подтверждено сотрудниками Google => https://groups.google.com/d/msg/google-admob-ads-sdk/_x12qmjWI7M/9ZQs-v0ZZTMJ

Та же проблема здесь. Я вижу их в 95% случаев на устройствах Android 4.0.3. Оставшиеся 5% для 2.3 устройств

Ошибки случайным образом происходят из разных частей кода. Некоторые примеры:

  java.lang.NoClassDefFoundError: android/os/AsyncTask at android.webkit.WebView.setupPackageListener(WebView.java:1305) at android.webkit.WebView.<init>(WebView.java:1176) at android.webkit.WebView.<init>(WebView.java:1136) 

а также

  java.lang.NoClassDefFoundError: android/os/AsyncTask at android.webkit.WebView.setupPackageListener(WebView.java:1354) at android.webkit.WebView.access$10900(WebView.java:363) at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:10411) 

а также

  java.lang.NoClassDefFoundError: android.os.AsyncTask at android.webkit.WebView.setupPackageListener(WebView.java:1385) at android.webkit.WebView.<init>(WebView.java:1192) at android.webkit.WebView.<init>(WebView.java:1150) at android.webkit.WebView.<init>(WebView.java:1135) at android.webkit.WebView.<init>(WebView.java:1106) at android.webkit.WebView.<init>(WebView.java:1093) at com.google.android.gms.ads.internal.util.gf(SourceFile:400) at com.google.android.gms.ads.internal.util.ga(SourceFile:385) 

Совершенно непонятно, почему эти ошибки происходят. Обычно я не вижу ничего в стеке, указывающем на мой код.

У меня такая же ошибка:

 BuscaDatosJugador().execute(participante.getIconImageUrl(),String.valueOf(altoenvio), String.valueOf(contador)); 

Мое решение:

 final Runnable r = new Runnable() { public void run() { try { --- my code --- } }; r.run(); } 

Я испытал ту же ошибку на Android 2.3.3, но такое же приложение было стабильным на 4.0+. Это Freemium, и ошибка возникает только в режиме FREE, который запускает рекламные объявления Google Admob. Поэтому ошибка должна быть связана с этим, но у меня нет деталей. Вот как я решил проблему:

Выполните инструкцию, которая приведет к загрузке класса AsyncTask перед загрузкой объявлений.

Шаги 1: создать фиктивный класс расширения AsyncTask

 public class DummyAsyncTask extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub return null; } } 

Шаг 2: только в вашей основной деятельности:

 public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new DummyAsyncTask(); . .some code . load your ads here } } 

После шага 2 выше все остальные секции кода, которые запускают расширенный класс AsyncTask, запускаются нормально.