Tutto quello che devi sapere sui componenti dell'architettura Android
Pubblicato: 2022-01-02Componenti dell'architettura
L'architettura è un piano stabile che deve essere realizzato prima che inizi il processo di sviluppo. I componenti dell'architettura mantengono l'applicazione organizzata, collegano tutti i componenti e forniscono una raccolta di librerie che aiutano a progettare applicazioni robuste, verificabili e gestibili. La nuova architettura di Android suggerisce alcuni principi chiave per creare un'applicazione ideale con sicurezza ed evitare classi gonfiate che sono difficili da mantenere e testare.
Costruzioni
Esempi di base per i blocchi predefiniti sono Attività, Visualizzazione, Intenti, Servizi, Frammenti, File manifest, AVD (dispositivo virtuale Android). Questi blocchi sono la rappresentazione dell'architettura dei componenti dell'applicazione razionale e sono anche segni di punti deboli dello sviluppatore.
Il primo set ti aiuta con
- Gestisci automaticamente la tua attività e frammenta i cicli di vita per evitare perdite di memoria e risorse
- Mantieni oggetti dati Java su un database SQLite
Componenti:
1. Componenti del ciclo di vita
Questo componente viene utilizzato per aggiungere la consapevolezza del ciclo di vita. I componenti del ciclo di vita includono Lifecycle, LifecycleOwner e LifecycleObserver
Ciclo vitale
Finora il ciclo di vita è una classe astratta gestita dal sistema stesso. Ma nello scenario attuale, Lifecycle identifica lo stato del componente e si comporta e termina l'attività di conseguenza al momento opportuno.
Proprietario del ciclo di vita
LifecycleOwner è un'interfaccia che può implementare per ottenere un oggetto del ciclo di vita dal metodo getLifecycle(). ProcessLifecycleOwner è utile quando si desidera gestire il ciclo di vita di un intero processo.
Lifecycle Observer
LifecycleObserver osserva i componenti LifecycleOwner come Attività e Frammenti. Riceve LifecycleOwner.Event e reagisce ad essi tramite i metodi di annotazione.
Implementando tutto questo insieme, possiamo creare un'applicazione consapevole del ciclo di vita.
Implementazione dell'osservatore del ciclo di vita
public class TestObserver implementa LifecycleObserver {
public MyObserver (ciclo di vita del ciclo di vita) {
// Avvia l'osservazione del ciclo di vita
ciclo di vita.addObserver(this);
...
}
// Metodi annotati chiamati quando il ciclo di vita associato passa attraverso questi eventi
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
}
}
Ora possiamo usare questo osservatore nel nostro componente app, usando la seguente implementazione TestObserver osservatore = new TestObserver(aLifecycleOwner.getLifecycle());
2. Dati in tempo reale
Il componente LiveData è un titolare di dati che contiene un valore che può essere osservato. Con livesata ogni volta che Activity o Fragment vengono aggiornati, riceveremo una notifica in modo che la tua interfaccia utente sia sempre aggiornata. È un involucro attorno ai tuoi modelli tipici che avvisa gli osservatori quando qualcosa cambia in quel modello. Il vantaggio principale di livesata è non più perdite di memoria e NullPointerExceptions dovute a visualizzazioni inesistenti.
Crea oggetti LiveData
public class MyViewModel estende ViewModel {
// Crea un LiveData con una stringa
privato MutableLiveData<String> mData;
public MutableLiveData<String> getData() {
if (mData == null) {
mData = new MutableLiveData<String>();
}
restituire mData;
}
}
Osserva gli oggetti LiveData
Il codice seguente illustra come osservare l'oggetto LiveData:
public class MyActivity estende AppCompatActivity {
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel .class);
model.getData().observe(this, data -> {
// aggiorna l'interfaccia utente
});
}
}3. Visualizza modello
ViewModel utile per fornire e mantenere i dati per i componenti dell'interfaccia utente (Attività o Frammento) in modo consapevole del ciclo di vita. È in grado di sopravvivere attraverso le modifiche alla configurazione. Quindi, se distruggi l'attività o cambi l'orientamento del telefono, non perderai ViewModel e dati. A causa dell'istanza LiveData posizionata nella classe ViewModel, l'input da parte nostra non è richiesto.
Non devi preoccuparti del ciclo di vita dell'interfaccia utente dei dati del titolare nell'interfaccia utente. ViewModel sarà costruito automaticamente attraverso una fabbrica e non dovrai occuparti di crearlo e demolirlo da solo.

Implementa un ViewModel
È illustrato dal seguente codice di esempio:
public class MyViewModel estende ViewModel {
private MutableLiveData<List<Studenti>> studenti;
public LiveData<List<Students>> getStudents () {
if (studenti == null) {
studenti = new MutableLiveData<List<Studenti>>();
loadStudents();
}
studenti di ritorno;
}
private void loadStudents () {
// Esegue un'operazione asincrona per recuperare gli studenti.
}
}È possibile accedere a questo elenco da un'attività come segue:
public class MyActivity estende AppCompatActivity {
public void onCreate (Bundle savedInstanceState) {
// Crea un ViewModel la prima volta che il sistema chiama il metodo onCreate() di un'attività.
// Le attività ricreate ricevono la stessa istanza MyViewModel creata dalla prima attività.
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getStudents().observe(this, studenti -> {
// aggiorna l'interfaccia utente
});
}
}4. Stanza
Room è una libreria di database e un'ottima alternativa al database SQLite. Per utilizzare il database SQLite è sempre necessario scrivere molto boilerplate. Possiamo definire il database aggiungendo annotazioni nella classe Model. La libreria aiuta a creare una cache dei dati dell'app su un dispositivo. È molto simile a OrmLite.
Ci sono 3 componenti principali in Room:
un. Banca dati
Poiché la tua app è persistente, i dati relazionali e contengono il titolare del database, funge da punto di accesso principale per la connessione sottostante alla classe annotata con @Database dovrebbe soddisfare le seguenti condizioni:
Sii una classe astratta che estende RoomDatabase.
Includere l'elenco delle entità collegate al database che incorpora l'annotazione.
Restituisce la classe annotata con @Dao e contiene un metodo astratto che ha 0 argomenti.
Durante l'esecuzione, è possibile ottenere un'istanza del database chiamando Room.inMemoryDatabaseBuilder() oppure Room.databaseBuilder().
B. Entità
Rappresenta una tabella all'interno del database.
C. DAO
Contiene i metodi utilizzati per accedere al database.
Creazione di entità
@Entità
Utente di classe pubblica {
@Chiave primaria
int uid privato;
@ColumnInfo(name = "first_name")
private String firstName;
@ColumnInfo(name = "cognome")
cognome stringa privato;
// Getter e setter vengono ignorati per brevità,
// ma sono necessari per il funzionamento di Room.
}Crea database
@Database(entità = {User.class}, versione = 1)
la classe astratta pubblica AppDatabase estende RoomDatabase {
ISTANZA AppDatabase statico privato;
public static AppDatabase getDatabase(Context context) {
if (ISTANZA == nullo) {
ISTANZA = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_db").build();
}
ISTANZA di ritorno;
}
}Questa classe viene utilizzata per creare il database e ottenerne un'istanza. Creiamo il database utilizzando il seguente codice.
Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, “my_db”).build();
Crea l'oggetto di accesso ai dati
Annota la classe con l'annotazione @Dao. Un'implementazione di classe verrà quindi generata da Room che implementa i metodi definiti nell'interfaccia (molto simile a come funziona Retrofit).
@Dao
interfaccia pubblica UserDao {
@Query("SELECT * FROM utente")
Lista<Utente> getAll();
@Query("SELECT * FROM utente WHERE uid IN (:userIds)")
List<User> loadAllByIds(int[] userIds);
@Query("SELECT * FROM utente WHERE first_name LIKE :first AND "
+ "cognome MI PIACE: ultimo LIMITE 1")
Utente findByName (prima stringa, ultima stringa);
@Inserire
void insertAll(Utente... utenti);
@Eliminare
void delete(Utente utente);
}Conclusione
Questo articolo fornisce una conoscenza di base dei componenti dell'architettura Android. Abbiamo cercato di includere tutti gli argomenti relativi alla nuova architettura Android proposta che risolvono tutti i problemi rilevanti che vengono affrontati dallo sviluppatore durante lo sviluppo dell'applicazione. Tuttavia, se riscontri problemi, prendi in considerazione l' assunzione di uno sviluppatore Android di Elsner Technology .
