Android: NoClassDefFoundError android.os.AsyncTask

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

Фатальное исключение: java.lang.NoClassDefFoundError android.os.AsyncTask

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

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

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

Ответы

Ответ 2

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

Работать над тем, чтобы добавить:

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

в Application#onCreate()

это означает, что корневой загрузчик классов загружает AsyncTask, чтобы затем он был доступен из Служб Службы.

Ответ 3

Такая же проблема. Я вижу их в 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.g.f(SourceFile:400)
   at com.google.android.gms.ads.internal.util.g.a(SourceFile:385)

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

Ответ 4

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

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

Мое решение:

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

    r.run();
}

Ответ 5

Я испытал ту же ошибку на 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, запускаются нормально.