2012-09-18 17 views
5

Con la disponibilidad de teléfonos Android con múltiples núcleos, ¿cómo pueden los desarrolladores de aplicaciones asegurarse de que su aplicación haga uso de la potencia de procesamiento adicional de esos núcleos? Por lo que entiendo, lo único que los desarrolladores de aplicaciones pueden hacer es hacer que su aplicación tenga varios subprocesos y dejar que el kernel de Android se encargue de delegar las tareas en diferentes núcleos.Cómo optimizar las aplicaciones de Android para múltiples núcleos

Me gustaría saber si hay algo más que se pueda hacer para optimizar para varios núcleos. Además, ¿cuáles son las mejores prácticas de multi-threading en Android.

+2

Mi mejor consejo con multihilo: * No * .. * * excepto donde encaja paralelización el problema es bueno * y * hay un beneficio mensurable. Es difícil corregirlo, y muchas cosas (como la IU) pueden intrínsecamente * no * enhebrarse de forma segura. (Para las tareas de IU que requieren procesamiento en segundo plano, generalmente es más sencillo usar "trabajadores en segundo plano", incluido [AsyncTask] (http://developer.android.com/reference/android/os/AsyncTask.html), en lugar de hilos directamente). –

+1

Estoy respetuosamente en desacuerdo, teniendo en cuenta que la API de Android ha recorrido un largo camino para ayudar a aliviar el infierno de rastreo de 'Contexto', que' sincronizado' es nuestro amigo, y, finalmente, que el paradigma llegó para quedarse. Incluso las aplicaciones simples tienen (generalmente) cosas separadas para inicializar/cargar/... antes de mostrar información, así que debemos hacer lo que podamos para terminar con esto: "multinúcleo es inútil" (usuario) o "multinúcleo es difícil" (devs). Y también tiene la ventaja de cambiar la mentalidad de la mayoría de los desarrolladores sobre el cuidado de la segmentación de subprocesos de interfaz de usuario (causa n. ° 1 de aplicaciones lentas). El punto es que hay muchos beneficios. – davidcesarino

Respuesta

2

En lugar de tratar de realizar subprocesos, es mejor utilizar paradigmas incorporados como AsyncTask.

Si desea

//Sets up a thread pool where NUM_THREADS is the amount that can run at the same time 
ExecutorService threadPool = null; 
threadPool = Executors.newFixedThreadPool(NUM_THREADS); 

//Will execute something on one of the threads queuing if necessary 
threadPool.execute(new Runnable() { 
    @Override 
    public void run() { 

         }}); 

llamadas Normalmente web y análisis de datos se debe hacer en un hilo separado

Cuestiones relacionadas