¿En qué casos se usa un patrón singleton en el desarrollo de Android?

De acuerdo con JournalDev

El patrón Singleton restringe la creación de instancias de una clase y garantiza que solo exista una instancia de la clase en la máquina virtual de Java. La clase singleton debe proporcionar un punto de acceso global para obtener la instancia de la clase.

Esto se usa en Android en lugares donde es necesario cerrar un recurso para evitar pérdidas de memoria. La base de datos SQLite es un buen ejemplo de esto, así como cualquier clase o biblioteca que no sea Activity / Fragment que requiera un Fragment.

Por esta razón, para limitar el número de instancias de la base de datos SQLite que crea su aplicación, puede usar un patrón singleton que devuelva solo una instancia de SQLite. Aquí hay un ejemplo

DatabaseHelper estática privada mDatabaseInstance = null;

Public static DatabaseHelper newInstance (contexto de contexto) {
// primero verifica si el asistente de la base de datos
// los datos del miembro son nulos
// crea uno nuevo si es nulo

if (mDatabaseInstance == null) {
mDatabaseInstance = new DatabaseHelper (context.getApplicationContext ());
}

// de cualquier manera, siempre tenemos que devolver una instancia de
// nuestra clase de base de datos cada vez que se llama a este método
return mDatabaseInstance;
}

Private DatabaseHelper (contexto de contexto) {
super (contexto, Constantes.DATABASE_NAME, nulo, CUR_DATABASE_VERSION);
mContext = contexto;
}
}

Si está comenzando con el desarrollo de Android, es posible que no tenga que preocuparse mucho por esto, ya que las tecnologías de bases de datos modernas, como Realm Database y Firebase database, se encargan de esto.

La mejor manera de usar singletons en Android es no usarlos en absoluto. También puede anular un objeto Aplicación con el suyo y colocar allí cualquier tipo de datos compartidos; es un singleton natural. También puedes crearlos con herramientas como Dagger. Solo recuerde: el único singleton seguro es el objeto de aplicación, otros pueden volverse “nulos” en cada segundo debido a un ciclo de vida complicado.

Las mejores prácticas para Android son generar un gráfico de objetos vinculados a la aplicación que luego se inyectará en clases con ciclos de vida como actividades y fragmentos. En caso de destrucción, asegúrese de desatarlos para no perder memoria. ¿Pero por qué harías esto? A menudo tiene algún tipo de base de datos y una implementación de su API de back-end. Limpia las cosas cuando reutiliza componentes. Además, normalmente no tiene mucho sentido mantener varias instancias de bases de datos.