2012-11-18 51 views
3

我有一個基於AsyncTask類的多個擴展的應用程序。AsyncTask不能在Android 4.0及更高版本中執行

一切工作正常,4.0以下的任何Android版本。

在4.0或更高版本中,我的「doInBackground」方法都不執行。 OnPreExecute被調用,但「doInBackground」和onPostExecute從未達到。

我看到這是一個谷歌問題。有沒有什麼辦法解決這一問題?我需要保持AsyncTasks類和行爲。使用普通線程意味着我需要更改我的整個應用程序。

謝謝

回答

1

我不知道爲什麼我的問題是downvoted,因爲這確實是Android版本之間的谷歌兼容性問題。

我用下面的輔助類來執行任務asynk:

public class AsyncTaskExecutionHelper { 
static class HoneycombExecutionHelper { 
    public static <P> void execute(AsyncTask<P, ?, ?> asyncTask, boolean parallel, P... params) { 
     Executor executor = parallel ? AsyncTask.THREAD_POOL_EXECUTOR : AsyncTask.SERIAL_EXECUTOR; 
     asyncTask.executeOnExecutor(executor, params); 
    } 
} 

public static <P> void executeParallel(AsyncTask<P, ?, ?> asyncTask, P... params) { 
    execute(asyncTask, true, params); 
} 

public static <P> void executeSerial(AsyncTask<P, ?, ?> asyncTask, P... params) { 
    execute(asyncTask, false, params); 
} 

private static <P> void execute(AsyncTask<P, ?, ?> asyncTask, boolean parallel, P... params) { 
    if (Build.VERSION.SDK_INT >= 11) { 
     HoneycombExecutionHelper.execute(asyncTask, parallel, params); 
    } else { 
     asyncTask.execute(params); 
    } 
} 

}

打電話給你asynk任務以下列方式:

 CustomAsynkTas customTask = new CustomAsynkTask(); 
     AsyncTaskExecutionHelper.executeParallel(customTask); 

其中

CustomAsynkTask extends AsyncTask 
{ 
     //etc 
} 

經過測試,它適用於所有Android版本。

+0

THREAD_POOL_EXECUTOR在3.0中首次引入時,它如何在所有android版本上運行? –

0

你確定你的AsyncTask非不工作,如果你在啓動時運行他們中的很多,他們都在單個線程執行它可能需要一段時間來執行所有的人。

嘗試在您的Application.onCreate或主要活動onCreate中運行一個新的AsyncTask並查看它是否運行。這樣你將測試一個獨立的AsyncTask,它從一開始就開始。

相關問題