几周后,我看到越来越多的应用程序崩溃,但有以下异常
致命异常:java.lang.NoClassDefFoundError android.os.AsyncTask
此代码已运行一个月没有任何问题,现在似乎在某些设备上失败(75%android 2.3.x和25%android 4.0.3) 当我创建一个扩展AsyncTask的类的新实例时,它失败了。
我从UI线程创建这个类。
如何在SDK中定义该类?
答案 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)
它看起来像是另一个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 :(得分: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扩展类的所有其他代码部分都正常运行。