Wszystko, co musisz wiedzieć o komponentach architektury Androida

Opublikowany: 2022-01-02

Elementy architektury

Architektura to stały plan, który należy wykonać przed rozpoczęciem procesu rozwoju. Komponenty architektury utrzymują porządek w aplikacji, wiążą wszystkie komponenty razem i zapewniają kolekcję bibliotek, które pomagają projektować niezawodne, weryfikowalne i konserwowalne aplikacje. Nowa architektura Androida sugeruje kilka kluczowych zasad tworzenia idealnej aplikacji z zabezpieczeniami i unikania nadętych klas, które są trudne do utrzymania i testowania.

Cegiełki

Podstawowe przykłady bloków konstrukcyjnych to aktywność, widok, intencje, usługi, fragmenty, plik manifestu, AVD (urządzenie wirtualne z systemem Android). Bloki te reprezentują racjonalną architekturę komponentów aplikacji, a także są oznakami problemów programistów.

Pierwszy zestaw pomaga w

  • Automatycznie zarządzaj swoją aktywnością i cyklami życia fragmentów, aby uniknąć wycieków pamięci i zasobów
  • Utrwalaj obiekty danych Java w bazie danych SQLite

Składniki:

1. Składniki cyklu życia

Ten składnik służy do zwiększania świadomości cyklu życia. Składniki cyklu życia obejmują Lifecycle, LifecycleOwner i LifecycleObserver

Koło życia

Jak dotąd cykl życia jest klasą abstrakcyjną zarządzaną przez sam system. Jednak w obecnym scenariuszu Lifecycle identyfikuje stan komponentu i odpowiednio zachowuje się i kończy zadanie w odpowiednim czasie.

Właściciel cyklu życia

LifecycleOwner to interfejs, który można zaimplementować w celu pobrania obiektu cyklu życia z metody getLifecycle(). ProcessLifecycleOwner jest przydatny, gdy chcesz zarządzać cyklem życia całego procesu.

Obserwator cyklu życia

LifecycleObserver obserwuje składniki LifecycleOwner, takie jak działania i fragmenty. Odbiera LifecycleOwner.Event i reaguje na nie za pomocą metod adnotacji.

Wdrażając to wszystko razem, możemy stworzyć aplikację obsługującą cykl życia.

  • Implementacja obserwatora cyklu życia

 public class TestObserver implementuje LifecycleObserver {

publiczny MyObserver (cykl życia) {

// Rozpoczyna obserwację cyklu życia

cykl życia.addObserver(to);

...

}

// Metody z adnotacjami wywoływane, gdy powiązany cykl życia przechodzi przez te zdarzenia

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

public void onResume() {

}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

public void onPause() {

}

}

Teraz możemy użyć tego obserwatora w naszym komponencie aplikacji, korzystając z następującej implementacji TestObserver Observer = new TestObserver(aLifecycleOwner.getLifecycle());

2. Dane na żywo

Komponent LiveData to pojemnik na dane, który zawiera wartość, którą można zaobserwować. Dzięki Livedata zawsze, gdy Aktywność lub Fragment zostanie zaktualizowany, otrzymamy powiadomienie, dzięki czemu Twój interfejs użytkownika będzie zawsze aktualizowany. Jest to opakowanie wokół typowych modeli, które powiadamia obserwatorów o zmianach w tym modelu. Główną zaletą livedata jest brak wycieków pamięci i wyjątków NullPointerException z powodu nieistniejących widoków.

  • Twórz obiekty LiveData

 public class MyViewModel rozszerza ViewModel {
// Utwórz LiveData z ciągiem
prywatne MutableLiveData<String> mData;
public MutableLiveData<String> getData() {
if ( mData == null) {
mData = new MutableLiveData<String>();
}
zwróć mDane;
}
}
  • Obserwuj obiekty LiveData

 Poniższy kod ilustruje jak obserwować obiekt LiveData:
public class MyActivity rozszerza AppCompatActivity {
public void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel .class);
model.getData().observe(to, dane -> {
// zaktualizuj interfejs użytkownika
});
}
}

3. Zobacz model

ViewModel przydatny do dostarczania i utrzymywania danych dla komponentów interfejsu użytkownika (aktywność lub fragment) w sposób świadomy cyklu życia. Jest w stanie przetrwać zmiany konfiguracji. Więc jeśli zniszczysz aktywność lub zmienisz orientację telefonu, nie stracisz ViewModel i danych. Ze względu na instancję LiveData, która jest umieszczona pod klasą ViewModel, dane wejściowe z naszego końca nie są wymagane.

Nie musisz się martwić o cykl życia UI danych posiadacza w UI. ViewModel zostanie zbudowany automatycznie przez fabrykę i nie będziesz musiał samodzielnie tworzyć go i wyburzać.

  • Zaimplementuj ViewModel

 Ilustruje to następujący przykładowy kod:
public class MyViewModel rozszerza ViewModel {
prywatne MutableLiveData<List<Students>> studentów;
public LiveData<List<Studenci>> getStudents () {
jeśli ( studenci == null) {
studenci = new MutableLiveData<List<Studenci>>();
loadStudents();
}
powrót studentów;
}
private void loadStudents () {
// Wykonaj operację asynchroniczną, aby pobrać uczniów.
}
}

Dostęp do tej listy można uzyskać z poziomu aktywności w następujący sposób:

 public class MyActivity rozszerza AppCompatActivity {
public void onCreate(Bundle saveInstanceState) {
// Utwórz ViewModel przy pierwszym wywołaniu przez system metody onCreate() działania.
// Odtworzone działania otrzymują tę samą instancję MyViewModel utworzoną przez pierwsze działanie.
Model MyViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
model.getStudents ().observe(to, studenci -> {
// zaktualizuj interfejs użytkownika
});
}
}

4. Pokój

Room to biblioteka baz danych i świetna alternatywa dla bazy danych SQLite. Aby korzystać z bazy danych SQLite, zawsze konieczne jest napisanie dużej ilości boilerplate’u. Bazę danych możemy zdefiniować poprzez dodanie adnotacji w klasie Model. Biblioteka pomaga stworzyć pamięć podręczną danych aplikacji na urządzeniu. Jest bardzo podobny do OrmLite.

Pokój składa się z 3 głównych elementów:

a. Baza danych

Ponieważ Twoja aplikacja jest utrwalona, ​​dane relacyjne i zawiera posiadacza bazy danych, służy jako główny punkt dostępu dla bazowego połączenia z klasą z adnotacją @Database, która powinna spełniać następujące warunki:

Bądź klasą abstrakcyjną, która rozszerza RoomDatabase.

Dołącz listę podmiotów powiązanych z bazą danych zawierającą adnotację.

Zwraca klasę z adnotacją @Dao i zawiera abstrakcyjną metodę, która ma 0 argumentów.

W czasie wykonywania można uzyskać instancję bazy danych, wywołując Room.inMemoryDatabaseBuilder() lub Room.databaseBuilder().

b. Podmiot

Reprezentuje tabelę w bazie danych.

C. DAO

Zawiera metody używane do uzyskiwania dostępu do bazy danych.

  • Tworzę podmiot

 @Podmiot
klasa publiczna Użytkownik {
@Klucz podstawowy
prywatny int uid;
@ColumnInfo(nazwa = "imię")
prywatne String imię;
@ColumnInfo(nazwa = "nazwisko")
prywatne Nazwisko String;

// Gettery i settery są ignorowane dla zwięzłości,
// ale są one wymagane do działania pokoju.
}
  • Utwórz bazę danych

 @Baza danych(entities = {User.class}, wersja = 1)
public abstract class AppDatabase rozszerza RoomDatabase {
prywatna statyczna INSTANCJA AppDatabase;
public statyczne AppDatabase getDatabase (kontekst kontekstu) {
if (INSTANCJA == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_db").build();
}
zwróć INSTANCJĘ;
}
}

Ta klasa służy do tworzenia bazy danych i pobierania jej instancji. Bazę danych tworzymy za pomocą poniższego kodu.

Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, “my_db”).build();

  • Utwórz obiekt dostępu do danych

Dodaj adnotację do klasy adnotacją @Dao. Implementacja klasy zostanie następnie wygenerowana przez Room, która implementuje metody zdefiniowane w interfejsie (bardzo podobne do tego, jak działa Retrofit).

 @dao
interfejs publiczny UserDao {
@Query("WYBIERZ * Z użytkownika")
Lista<Użytkownik> getAll();
@Query("SELECT * FROM user WHERE uid IN (:userIds)")
Lista<Użytkownik> loadAllByIds(int[] userIds);

@Query("SELECT * FROM użytkownik WHERE imię LIKE :first AND "
+ "last_name LIKE: ostatni LIMIT 1")
Użytkownik findByName(Nazwa ciągu najpierw, ciąg na końcu);

@Wstawić
void insertAll(Użytkownik... użytkownicy);

@Kasować
void usuń (użytkownik);
}

Wniosek

Ten artykuł daje podstawową wiedzę na temat komponentów architektury Androida. Staraliśmy się uwzględnić wszystkie tematy związane z nowo zaproponowaną architekturą Androida, które rozwiązują wszystkie istotne problemy, z którymi zmaga się programista podczas tworzenia aplikacji. Mimo to, jeśli znajdziesz jakieś problemy, rozważ Zatrudnij programistę Android firmy Elsner Technology .