2014-11-25 57 views
15

由於幾個星期,我看到我的應用程序越來越多的崩潰,並顯示以下異常安卓:NoClassDefFoundError的android.os.AsyncTask

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

這段代碼已經運行了一個月沒有任何問題,它似乎現在在某些設備上失敗(75%android 2.3.x和25%android 4.0.3) 當我創建一個類的新實例時失敗它擴展了AsyncTask。

我從UI線程創建這個類。

如何找到該類,因爲它在SDK中定義?

+3

你會友善地分享你的代碼嗎? – 2014-11-25 07:59:07

+0

這與代碼無關。我從我的代碼的不同部分隨機崩潰,這些部分在月份還沒有更新。 這不是一個代碼問題,也許是一個項目/構建問題,但我不明白AsyncTask上的NoClassDefFoundError是如何實現的... – user1026605 2014-11-25 08:01:55

+0

如果您使用的是eclipse,請右鍵單擊您的項目androidtools> addsupport lib沒有工作嘗試修復項目屬性。這是我的猜測。請提供logcat進一步調查。 – Amith 2014-11-25 08:03:33

回答

0

我有同樣的錯誤:

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

我的解決方案:

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

    r.run(); 
} 
+1

這是一個Google Play服務錯誤。我不想將我的代碼更新爲解決方法。我想繼續使用asynctasks,這使我可以輕鬆更新UI – user1026605 2014-11-29 08:53:29

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) 

它是完全不清楚爲什麼這些錯誤發生。通常我沒有看到堆棧跟蹤中指向我的代碼的任何東西。

10

是的,看起來這是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,使其然後可以從播放服務中。

0

我在android 2.3.3上遇到同樣的錯誤,但同樣的應用程序在4.0+以上是穩定的。這是免費增值服務,只有在運行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擴展類正常運行。