1c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes/* 2c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Copyright (C) 2014 The Android Open Source Project 3c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * 4c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * you may not use this file except in compliance with the License. 6c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * You may obtain a copy of the License at 7c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * 8c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * 10c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Unless required by applicable law or agreed to in writing, software 11c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * See the License for the specific language governing permissions and 14c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * limitations under the License. 15c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes */ 16c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 17c6cdc41397bc3ad2c936069af6d448f242790513Chris Banespackage android.support.v4.os; 18c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 19c6cdc41397bc3ad2c936069af6d448f242790513Chris Banesimport android.os.AsyncTask; 20c6cdc41397bc3ad2c936069af6d448f242790513Chris Banesimport android.os.Build; 21c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 22c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes/** 23c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Helper for accessing features in {@link android.os.AsyncTask} 24c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * introduced after API level 4 in a backwards compatible fashion. 25c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes */ 26c6cdc41397bc3ad2c936069af6d448f242790513Chris Banespublic class AsyncTaskCompat { 27c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 28c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes /** 29c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Executes the task with the specified parameters, allowing multiple tasks to run in parallel 30c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * on a pool of threads managed by {@link android.os.AsyncTask}. 31c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * 32c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * @param task The {@link android.os.AsyncTask} to execute. 33c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * @param params The parameters of the task. 34c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * @return the instance of AsyncTask. 35c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes */ 36c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes public static <Params, Progress, Result> AsyncTask<Params, Progress, Result> executeParallel( 37c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes AsyncTask<Params, Progress, Result> task, 38c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes Params... params) { 39c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes if (task == null) { 40c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes throw new IllegalArgumentException("task can not be null"); 41c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes } 42c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 43c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes if (Build.VERSION.SDK_INT >= 11) { 44c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes // From API 11 onwards, we need to manually select the THREAD_POOL_EXECUTOR 45c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes AsyncTaskCompatHoneycomb.executeParallel(task, params); 46c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes } else { 47c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes // Before API 11, all tasks were run in parallel 48c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes task.execute(params); 49c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes } 50c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 51c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes return task; 52c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes } 53c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes 54c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes} 55