WEBVTT

1
00:01.160 --> 00:05.930
La terza parte del database della stanza è
la classe del database.

2
00:05.930 --> 00:12.230
La classe del database fornisce
all'applicazione istanze dei DAO definiti
dall'utente.

3
00:12.230 --> 00:19.370
A sua volta, l'applicazione può usare i
DAO per recuperare

4
00:19.370 --> 00:19.730
i dati dal database come istanze dei dati
associati.

5
00:19.730 --> 00:21.200
Oggetti entità.

6
00:21.200 --> 00:28.790
L'applicazione può anche utilizzare le
entità di dati definite per aggiornare le

7
00:28.820 --> 00:31.130
righe delle tabelle corrispondenti o per
creare nuove righe da inserire.

8
00:31.130 --> 00:32.450
Tornare ad Android Studio.

9
00:32.480 --> 00:32.900
Qui.

10
00:32.900 --> 00:42.890
All'interno della stanza dobbiamo creare
una classe astratta chiamata movies o
movie D movies DB contrassegnata come
astratta.

11
00:42.890 --> 00:47.390
Non abbiamo bisogno di creare istanze e lo
contrassegniamo come database.

12
00:47.390 --> 00:51.350
Quindi questa annotazione proviene dal
pacchetto Android Room.

13
00:51.350 --> 00:56.060
Stiamo dicendo al database della stanza
che questa classe fungerà da database.

14
00:56.090 --> 00:58.460
Non mancate di specificare le entità.

15
00:58.490 --> 01:07.590
La classe del filmato è stata importata e
dobbiamo impostare la versione di questo
database come una estensione del database
della stanza.

16
01:07.620 --> 01:08.730
Ed eccoci qui.

17
01:08.730 --> 01:16.830
Quindi, in questa annotazione e
nell'estensione del database della stanza,
stiamo dicendo

18
01:16.830 --> 01:19.050
alla stanza che il DB dei filmati agirà
come classe del database.

19
01:19.050 --> 01:26.850
Il secondo passo consiste nell'ottenere
un'istanza dell'astratto Dow val movies
Dow movie Dow.

20
01:26.880 --> 01:34.680
Quindi dobbiamo seguire il design pattern
singleton per creare

21
01:34.680 --> 01:36.360
un oggetto companion, come abbiamo fatto
con retrofit.

22
01:36.360 --> 01:38.100
Torniamo quindi al caso del retrofit.

23
01:38.100 --> 01:44.190
Usiamo lo schema singleton qui nello
stesso modo in cui lo useremo con il
database delle stanze.

24
01:44.190 --> 01:51.150
Il pattern singleton viene utilizzato per
creare un'istanza del database, in modo
che esista una sola

25
01:51.150 --> 01:59.020
istanza del database, evitando un inutile
overhead associato alla creazione ripetuta
del DB e quando si

26
01:59.020 --> 02:06.130
utilizza la parola chiave companion,
l'oggetto companion definisce un'istanza
statica singleton della classe del
database.

27
02:06.130 --> 02:07.180
È molto semplice.

28
02:07.180 --> 02:08.980
Stiamo seguendo lo schema dei singleton.

29
02:08.980 --> 02:11.860
Abbiamo bisogno di una sola istanza di
questo database per.

30
02:12.130 --> 02:21.220
Per evitare istanze multiple associate
alla creazione ripetuta di un DB, iniziamo
con

31
02:21.250 --> 02:27.370
i filmati db privati var instance uguale a
null e contrassegniamo come volatile.

32
02:27.400 --> 02:36.010
L'annotazione volatile viene utilizzata
per indicare che il valore dell'istanza
della variabile non verrà mai memorizzato
nella cache e

33
02:36.010 --> 02:43.360
che tutte le letture e le scritture di
questa variabile verranno effettuate
direttamente da e verso la memoria
principale.

34
02:43.360 --> 02:48.940
Questo assicura che l'istanza sia visibile
a tutti i thread subito dopo la sua
scrittura.

35
02:48.940 --> 02:56.150
In questo contesto e nel pattern dei
singleton, la volatilità aiuta a

36
02:56.150 --> 03:02.840
garantire la sicurezza dei thread,
impedendo a più thread di creare

37
03:02.840 --> 03:03.710
istanze multiple del singleton quando
controllano la variabile nello stesso
momento.

38
03:03.710 --> 03:10.310
Quindi abbiamo impedito la creazione
multipla del database usando l'oggetto
companion e

39
03:10.310 --> 03:17.930
abbiamo impedito le istanze multiple di
una creazione di questa variabile di

40
03:17.930 --> 03:25.460
tipo movies db in condizioni di
multithreading usando l'annotazione
volatile e questa

41
03:25.460 --> 03:25.850
riga dichiara un'istanza di variabile
privata nullable di tipo movies db.

42
03:25.880 --> 03:33.230
La variabile viene istanziata o
inizializzata a null, a indicare

43
03:33.230 --> 03:34.820
che inizialmente non esiste alcuna istanza
di film db.

44
03:34.970 --> 03:43.130
Occorre quindi creare un metodo chiamato
get instance, che prenda come

45
03:43.130 --> 03:45.770
parametro un oggetto di tipo context e
restituisca filmati db.

46
03:46.370 --> 03:53.480
Questo metodo get instance fornisce un
modo per ottenere l'istanza singleton di
movie db.

47
03:53.510 --> 04:00.670
Utilizzerò la parola chiave synchronized
per verificare che solo un thread possa

48
04:00.670 --> 04:04.030
eseguire il blocco di codice all'interno
del blocco synchronized in qualsiasi
momento.

49
04:04.060 --> 04:12.520
Ok, questa è una parola chiave molto
importante con volatile, per

50
04:12.520 --> 04:14.500
evitare la creazione multipla di database
in caso di multithreading.

51
04:14.530 --> 04:18.430
VAR istanza equivale a istanza.

52
04:18.430 --> 04:25.210
Se l'istanza è uguale a null, creare
l'oggetto database.

53
04:25.300 --> 04:30.400
L'istanza equivale al costruttore di
database di punti stanza.

54
04:30.430 --> 04:39.880
È necessario fornire tre parametri: la
classe del contesto e il nome

55
04:39.880 --> 04:43.150
del contesto, che equivale alla classe del
db del filmato dell'applicazione.

56
04:43.180 --> 04:47.920
Java e il terzo parametro è il nome del
database.

57
04:47.950 --> 04:50.680
Non mancate di utilizzare la funzione di
costruzione.

58
04:50.680 --> 04:57.050
L'istanza viene controllata due volte, una
all'esterno del blocco sincronizzato e una
all'interno.

59
04:57.050 --> 05:03.920
Se l'istanza non è nulla prima di entrare
nel blocco sincronizzato, restituisce
l'istanza esistente.

60
05:03.920 --> 05:08.930
Se l'istanza è nulla, entra nel blocco
sincronizzato.

61
05:08.930 --> 05:14.690
All'interno del blocco sincronizzato, si
verifica nuovamente se l'istanza è

62
05:14.720 --> 05:16.550
nulla, per assicurarsi che nessun altro
thread l'abbia già inizializzata.

63
05:16.550 --> 05:23.570
Se è ancora nullo, crea una nuova istanza
e la assegna all'istanza.

64
05:23.570 --> 05:29.330
Quindi dobbiamo usare l'istanza e
assegnarla all'istanza che creiamo.

65
05:29.330 --> 05:36.800
Poi dobbiamo restituire l'istanza in cui
abbiamo creato il nostro database

66
05:36.800 --> 05:39.140
e impedire la creazione multipla di
database utilizzando l'oggetto companion.

67
05:39.140 --> 05:46.400
E abbiamo impedito la creazione multipla
di database in caso

68
05:46.400 --> 05:48.110
di multithreading, utilizzando il blocco
volatile e il blocco sincronizzato.


