Junior
¿Cómo crear una única instancia de una clase en Android?
sobes.tech AI
Respuesta de la IA
Para crear una única instancia de una clase en Android, generalmente se utiliza el patrón Singleton.
Existen varias formas de implementar Singleton:
-
Inicialización perezosa con sincronización:
public class Singleton { private static Singleton instance; private Singleton() { // El constructor privado evita la creación de otras instancias } public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }- Ventajas: Seguro para hilos.
- Desventajas: La sincronización puede reducir el rendimiento en llamadas frecuentes.
-
Inicialización en carga de clase (Eager initialization):
public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }- Ventajas: Seguro para hilos sin sincronización explícita. Más simple.
- Desventajas: La instancia se crea en la carga de la clase, incluso si no se usa.
-
Bloqueo con doble comprobación:
public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }- Ventajas: Mejor rendimiento que la sincronización simple, inicialización solo cuando es necesario.
- Desventajas: Requiere
volatilepara correcto funcionamiento en entornos multihilo (desde Java 5). Más complejo.
-
Clase interna estática:
public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }- Ventajas: Seguro para hilos, inicialización perezosa, fácil de implementar. La opción más recomendada en versiones modernas de Java.
-
Uso de Enums:
public enum Singleton { INSTANCE; // Añadir métodos de la clase public void doSomething() { // ... } }- Ventajas: La forma más sencilla y segura para hilos, resistente a la serialización y reflexión. Se considera una buena práctica.
La elección de la implementación depende de los requisitos específicos de rendimiento y complejidad. En Android, a menudo se usan Enum o clase interna estática.