Android AsyncTask como argumento del método
Estoy trabajando en una aplicación que utiliza un montón de AsyncTasks. Cuando empecé a participar en la codificación de esta aplicación de la targetSdkVersion se estableció en 10, por lo que no tuvimos problemas con las AsyncTasks porque son todos ejecutados en paralelo hilos de fondo. Dado que hemos establecido el targtSdkVersion a 17 tenemos algunos problemas con las tareas, ya que ahora se ejecutan en un solo hilo de fondo. Para resolver este problema he encontrado el código siguiente para utilizar específicamente las tareas paralelas:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { myTask.execute(); }
Ahora, debido a que tenemos varias tareas que necesitan estas líneas de código, me gustaría escribir un método en nuestra propia clase Utils que ejecuta las tareas de esta manera … pero no puedo lograr esto, porque no puedo pasar el Diferentes tareas al método como argumento debido a la 'Param | Progreso | Result 'difiere de una tarea a otra. ¿Hay alguna manera de alcanzar nuestro objetivo? ¿Algunas ideas?
- Apertura de linterna en android con diferentes modos
- Cómo crear un botón de Twitter en Android?
- Obtenga la colección de nombres de parámetros de la url de Java / Android
- SQL Android Formulación de consultas con múltiples condiciones
- Cómo enviar parámetros a un archivo local en un WebView en android?
- Android, KSoap2 y .NET Web Service w / parameters = Resultado NULL
- Android.net.uri getQueryParameterNames () alternativa
- Android ArrayList <MyObject> pasar como parcelable
- Algunos parámetros de función denominados arg0, arg1, etc ... después de compilar una biblioteca JAR
- ¿Cómo pasar el parámetro a un webservice usando ksoap2?
- Android: ¿Cómo puedo pasar parámetros a OnPreExecute () de AsyncTask?
- Cómo establecer dinámicamente los parámetros de diseño en Android?
- Modificación de atributos anidados en un Layout incluido
Dado que AsyncTask
es una clase parametrizada, es necesario utilizar genéricos. Algo como esto:
@SuppressLint("NewApi") static <P, T extends AsyncTask<P, ?, ?>> void execute(T task, P... params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } }
Utilizar de esta manera:
MyAsyncTask task = new MyAsyncTask(); Utils.execute(task);