Wszystko, co musisz wiedzieć o komponentach architektury Androida
Opublikowany: 2022-01-02Elementy 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 .
