Im trying to allow my app to run on older versions of Android, Specifically API 10.
I've downloaded the support packages and used them to solve a few problems but im struggling to fix this one:
Field requires API level 11 (current min is 10): android.os.AsyncTask#THREAD_POOL_EXECUTOR
The Thread_Pool_Executor method was only added in API 11.
Is there any way i can use this in API 10 or do i have to revert back to:
myAsyncTask().execute();
instead of:
myAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
If so how do i check the API level?
Step #1: Set your build target (e.g., Project > Properties > Android in Eclipse) to API Level 11 or higher.
Step #2: Use Build.VERSION.SDK_INT
to determine your API level, to use executeOnExecutor()
only on newer Android devices.
For example, you could have this static utility method somewhere:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
else {
task.execute(params);
}
}
Then, to execute a task, just call executeAsyncTask()
, passing it your AsyncTask
instance and whatever parameters you want passed into your doInBackground()
method. executeAsyncTask()
will choose executeOnExecutor()
on API Level 11+ or use execute()
on older devices.