La terza parte del database della stanza è la classe del database.
La classe del database fornisce all'applicazione istanze dei DAO definiti dall'utente.
A sua volta, l'applicazione può usare i DAO per recuperare
i dati dal database come istanze dei dati associati.
Oggetti entità.
L'applicazione può anche utilizzare le entità di dati definite per aggiornare le
righe delle tabelle corrispondenti o per creare nuove righe da inserire.
Tornare ad Android Studio.
Qui.
All'interno della stanza dobbiamo creare una classe astratta chiamata movies o movie D movies DB contrassegnata come astratta.
Non abbiamo bisogno di creare istanze e lo contrassegniamo come database.
Quindi questa annotazione proviene dal pacchetto Android Room.
Stiamo dicendo al database della stanza che questa classe fungerà da database.
Non mancate di specificare le entità.
La classe del filmato è stata importata e dobbiamo impostare la versione di questo database come una estensione del database della stanza.
Ed eccoci qui.
Quindi, in questa annotazione e nell'estensione del database della stanza, stiamo dicendo
alla stanza che il DB dei filmati agirà come classe del database.
Il secondo passo consiste nell'ottenere un'istanza dell'astratto Dow val movies Dow movie Dow.
Quindi dobbiamo seguire il design pattern singleton per creare
un oggetto companion, come abbiamo fatto con retrofit.
Torniamo quindi al caso del retrofit.
Usiamo lo schema singleton qui nello stesso modo in cui lo useremo con il database delle stanze.
Il pattern singleton viene utilizzato per creare un'istanza del database, in modo che esista una sola
istanza del database, evitando un inutile overhead associato alla creazione ripetuta del DB e quando si
utilizza la parola chiave companion, l'oggetto companion definisce un'istanza statica singleton della classe del database.
È molto semplice.
Stiamo seguendo lo schema dei singleton.
Abbiamo bisogno di una sola istanza di questo database per.
Per evitare istanze multiple associate alla creazione ripetuta di un DB, iniziamo con
i filmati db privati var instance uguale a null e contrassegniamo come volatile.
L'annotazione volatile viene utilizzata per indicare che il valore dell'istanza della variabile non verrà mai memorizzato nella cache e
che tutte le letture e le scritture di questa variabile verranno effettuate direttamente da e verso la memoria principale.
Questo assicura che l'istanza sia visibile a tutti i thread subito dopo la sua scrittura.
In questo contesto e nel pattern dei singleton, la volatilità aiuta a
garantire la sicurezza dei thread, impedendo a più thread di creare
istanze multiple del singleton quando controllano la variabile nello stesso momento.
Quindi abbiamo impedito la creazione multipla del database usando l'oggetto companion e
abbiamo impedito le istanze multiple di una creazione di questa variabile di
tipo movies db in condizioni di multithreading usando l'annotazione volatile e questa
riga dichiara un'istanza di variabile privata nullable di tipo movies db.
La variabile viene istanziata o inizializzata a null, a indicare
che inizialmente non esiste alcuna istanza di film db.
Occorre quindi creare un metodo chiamato get instance, che prenda come
parametro un oggetto di tipo context e restituisca filmati db.
Questo metodo get instance fornisce un modo per ottenere l'istanza singleton di movie db.
Utilizzerò la parola chiave synchronized per verificare che solo un thread possa
eseguire il blocco di codice all'interno del blocco synchronized in qualsiasi momento.
Ok, questa è una parola chiave molto importante con volatile, per
evitare la creazione multipla di database in caso di multithreading.
VAR istanza equivale a istanza.
Se l'istanza è uguale a null, creare l'oggetto database.
L'istanza equivale al costruttore di database di punti stanza.
È necessario fornire tre parametri: la classe del contesto e il nome
del contesto, che equivale alla classe del db del filmato dell'applicazione.
Java e il terzo parametro è il nome del database.
Non mancate di utilizzare la funzione di costruzione.
L'istanza viene controllata due volte, una all'esterno del blocco sincronizzato e una all'interno.
Se l'istanza non è nulla prima di entrare nel blocco sincronizzato, restituisce l'istanza esistente.
Se l'istanza è nulla, entra nel blocco sincronizzato.
All'interno del blocco sincronizzato, si verifica nuovamente se l'istanza è
nulla, per assicurarsi che nessun altro thread l'abbia già inizializzata.
Se è ancora nullo, crea una nuova istanza e la assegna all'istanza.
Quindi dobbiamo usare l'istanza e assegnarla all'istanza che creiamo.
Poi dobbiamo restituire l'istanza in cui abbiamo creato il nostro database
e impedire la creazione multipla di database utilizzando l'oggetto companion.
E abbiamo impedito la creazione multipla di database in caso
di multithreading, utilizzando il blocco volatile e il blocco sincronizzato.