martes, 12 de febrero de 2013

Controlar cantidad de objetos generados en Android

Como todos sabemos, la GC de Android no es tan eficiente como la GC de la Máquina Virtual de Java, de modo que cuando desarrollamos en Android, es importante tener en cuenta la generación de objetos, y de ser posible, evitarla dentro de bucles de programa.


Una forma de saber la cantidad de objetos que se crearon en una porción de código, es utilizando algunas herramientas de la clase “Debug”.

Ejemplo:


Debug.startAllocCounting();
  
Persona p = new Persona();
Integer i = new Integer(5);
  
int allocCount = Debug.getThreadAllocCount();
Debug.stopAllocCounting();

Log.d("alloc","Alloc counter:"+allocCount);

Comenzamos el control ejecutando el método “startAllocCounting” luego ponemos las líneas de programa que queremos controlar si generan nuevos objetos o no, y por último llamamos al método “getThreadAllocCount” el cual nos devolverá la cantidad de espacios que se reservaron en memoria para el bloque de código entre ambos métodos.

Si ningún “new” se ejecuta dentro del bloque, el contador devolverá cero, de lo contrario, devolverá un valor distinto de cero.