Android: NoClassDefFoundError android.os.AsyncTask
Начиная с пары недель, я вижу больше и больше сбоев моего приложения со следующим исключением.
Фатальное исключение: java.lang.NoClassDefFoundError
android.os.AsyncTask
Этот код работает в течение месяца без каких-либо проблем, и теперь он кажется неудачным на некоторых устройствах (75% android 2.3.x и 25% android 4.0.3)
Это не удается, когда я создаю новый экземпляр класса, который расширяет AsyncTask.
Я создаю этот класс из потока пользовательского интерфейса.
Как этот класс не может быть найден, как он определен в SDK?
Ответы
Ответ 1
Он выглядит как еще одна ошибка Службы Google Play...
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
Ответ 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, запускаются нормально.