Android:NoClassDefFoundError android.os.AsyncTask

时间:2014-11-25 07:57:09

标签: android android-asynctask noclassdeffounderror

几周后,我看到越来越多的应用程序崩溃,但有以下异常

致命异常:java.lang.NoClassDefFoundError android.os.AsyncTask

此代码已运行一个月没有任何问题,现在似乎在某些设备上失败(75%android 2.3.x和25%android 4.0.3) 当我创建一个扩展AsyncTask的类的新实例时,它失败了。

我从UI线程创建这个类。

如何在SDK中定义该类?

5 个答案:

答案 0 :(得分:11)

是的,看起来这是其中一个版本的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,以便随后可以从Play服务中获取。

答案 1 :(得分:7)

答案 2 :(得分:1)

这里的问题相同。 我在Android 4.0.3设备上看到了95%的情况。 2.3设备剩余5%

错误是从代码的不同部分随机发生的。 一些例子:

   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)

完全不清楚为什么会发生这些错误。通常我没有在stacktrace中看到任何指向我的代码的东西。

答案 3 :(得分:0)

我有同样的错误:

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

我的解决方案:

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

    r.run();
}

答案 4 :(得分:0)

我在android 2.3.3上遇到了同样的错误,但同样的应用程序在4.0+上保持稳定。这是免费增值,只有在免费模式下运行谷歌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扩展类的所有其他代码部分都正常运行。