Все, что вам нужно знать о компонентах архитектуры Android
Опубликовано: 2022-01-02Компоненты архитектуры
Архитектура - это постоянный план, который необходимо составить до того, как начнется процесс разработки. Компоненты архитектуры поддерживают организацию приложений, связывают все компоненты вместе и предоставляют набор библиотек, которые помогают разрабатывать надежные, проверяемые и поддерживаемые приложения. Новая архитектура Android предлагает некоторые ключевые принципы для создания идеального приложения с безопасностью и предотвращения раздутых классов, которые сложно поддерживать и тестировать.
Строительные блоки
Основные примеры строительных блоков: Activity, View, Intents, Services, Fragments, Manifest File, AVD (виртуальное устройство Android). Эти блоки представляют рациональную компонентную архитектуру приложения, а также являются знаками болевых точек разработчика.
Первый набор поможет вам с
- Автоматически управляйте своей деятельностью и жизненными циклами фрагментов, чтобы избежать утечек памяти и ресурсов
- Сохранение объектов данных Java в базе данных SQLite
Компоненты:
1. Компоненты жизненного цикла
Этот компонент используется для повышения осведомленности о жизненном цикле. Компоненты жизненного цикла включают Lifecycle, LifecycleOwner и LifecycleObserver.
Жизненный цикл
Пока что жизненный цикл - это абстрактный класс, которым управляет сама система. Но в текущем сценарии жизненный цикл идентифицирует состояние компонента и соответствующим образом ведет себя и завершает задачу в подходящее время.
Жизненный цикл Владелец
LifecycleOwner - это интерфейс, который можно реализовать для получения объекта жизненного цикла из метода getLifecycle (). ProcessLifecycleOwner полезен, когда вы хотите управлять жизненным циклом всего процесса.
LifecycleObserver
LifecycleObserver наблюдает за компонентами LifecycleOwner, такими как действия и фрагменты. Он получает LifecycleOwner.Event и реагирует на них с помощью методов аннотации.
Реализуя все это вместе, мы можем создать приложение с учетом жизненного цикла.
Реализация наблюдателя жизненного цикла
открытый класс TestObserver реализует LifecycleObserver {
public MyObserver (жизненный цикл жизненного цикла) {
// Начинаем наблюдение за жизненным циклом
lifecycle.addObserver (это);
...
}
// Аннотированные методы, вызываемые, когда связанный жизненный цикл проходит через эти события
@OnLifecycleEvent (Lifecycle.Event.ON_RESUME)
public void onResume () {
}
@OnLifecycleEvent (Lifecycle.Event.ON_PAUSE)
public void onPause () {
}
}
Теперь мы можем использовать этого наблюдателя в нашем компоненте приложения, используя следующую реализацию TestObserver Observer = new TestObserver (aLifecycleOwner.getLifecycle ());
2. LiveData
Компонент LiveData - это хранилище данных, которое содержит значение, которое можно наблюдать. С liveata всякий раз, когда обновляется Activity или Fragment, мы будем получать уведомление, поэтому ваш пользовательский интерфейс всегда будет обновляться. Это оболочка вокруг ваших типичных моделей, которая уведомляет наблюдателей, когда что-то меняется в этой модели. Главное преимущество liveata - отсутствие утечек памяти и исключений NullPointerExceptions из-за несуществующих представлений.
Создание объектов LiveData
открытый класс MyViewModel расширяет ViewModel {
// Создаем LiveData со строкой
private MutableLiveData <String> mData;
public MutableLiveData <String> getData () {
if (mData == null) {
mData = новый MutableLiveData <String> ();
}
return mData;
}
}
Наблюдать за объектами LiveData
Следующий код показывает, как наблюдать за объектом LiveData:
открытый класс MyActivity расширяет AppCompatActivity {
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
MyViewModel model = ViewModelProviders.of (это) .get (MyViewModel .class);
model.getData (). наблюдать (это, данные -> {
// обновляем UI
});
}
}3. Просмотреть модель
ViewModel полезен для предоставления и поддержки данных для ваших компонентов пользовательского интерфейса (Activity или Fragment) с учетом жизненного цикла. Он может пережить изменения конфигурации. Поэтому, если вы уничтожите активность или измените ориентацию телефона, вы не потеряете ViewModel и данные. Поскольку экземпляр LiveData находится в классе ViewModel, ввод с нашей стороны не требуется.
Вам не нужно беспокоиться о жизненном цикле пользовательского интерфейса данных держателя в пользовательском интерфейсе. ViewModel будет создаваться автоматически через фабрику, и вам не нужно заниматься ее созданием и сносом самостоятельно.

Реализовать ViewModel
Это иллюстрируется следующим образцом кода:
открытый класс MyViewModel расширяет ViewModel {
частные студенты MutableLiveData <List <Students>>;
public LiveData <Список <Students>> getStudents () {
if (student == null) {
студенты = новый MutableLiveData <Список <Students>> ();
loadStudents ();
}
возвращение студентов;
}
private void loadStudents () {
// Выполняем асинхронную операцию для выборки студентов.
}
}Вы можете получить доступ к этому списку из занятия следующим образом:
открытый класс MyActivity расширяет AppCompatActivity {
public void onCreate (Bundle savedInstanceState) {
// Создаем ViewModel при первом вызове системой метода onCreate () действия.
// Повторно созданные действия получают тот же экземпляр MyViewModel, созданный первым действием.
MyViewModel model = ViewModelProviders.of (это) .get (MyViewModel.class);
model.getStudents () .observe (это, студенты -> {
// обновляем UI
});
}
}4. Комната
Room - это библиотека базы данных и отличная альтернатива базе данных SQLite. Чтобы использовать базу данных SQLite, всегда необходимо писать много шаблонов. Мы можем определить базу данных, добавив аннотации в класс Model. Библиотека помогает создать кеш данных приложения на устройстве. Он очень похож на OrmLite.
Комната состоит из 3 основных компонентов:
а. База данных
Поскольку ваше приложение сохраняется, реляционные данные и содержат держатель базы данных, оно служит главной точкой доступа для базового подключения к классу, аннотированному с помощью @Database, должно удовлетворять следующим условиям:
Будьте абстрактным классом, расширяющим RoomDatabase.
Включите список объектов, связанных с базой данных, включая аннотацию.
Он возвращает класс, помеченный @Dao и содержащий абстрактный метод с 0 аргументами.
Во время выполнения вы можете получить экземпляр базы данных, вызвав Room.inMemoryDatabaseBuilder () или Room.databaseBuilder ().
б. Организация
Представляет таблицу в базе данных.
c. DAO
Содержит методы, используемые для доступа к базе данных.
Создание объекта
@Организация
public class User {
@Первичный ключ
частный int uid;
@ColumnInfo (name = "first_name")
частная строка firstName;
@ColumnInfo (name = "last_name")
частная строка lastName;
// Геттеры и сеттеры для краткости игнорируются,
// но они необходимы для работы Room.
}Создать базу данных
@Database (entity = {User.class}, версия = 1)
общедоступный абстрактный класс AppDatabase расширяет RoomDatabase {
частная статическая база данных AppDatabase INSTANCE;
общедоступная статическая база данных приложений getDatabase (контекстный контекст) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder (context.getApplicationContext (), AppDatabase.class, «my_db»). Build ();
}
return INSTANCE;
}
}Этот класс используется для создания базы данных и получения ее экземпляра. Мы создаем базу данных, используя следующий код.
Room.databaseBuilder (context.getApplicationContext (), AppDatabase.class, «my_db»). Build ();
Создайте объект доступа к данным
Аннотируйте класс аннотацией @Dao. Затем Room будет сгенерирована реализация класса, которая реализует методы, определенные в интерфейсе (очень похоже на то, как работает Retrofit).
@Dao
общедоступный интерфейс UserDao {
@Query ("ВЫБРАТЬ * ОТ пользователя")
Список <Пользователь> getAll ();
@Query ("ВЫБРАТЬ * ОТ пользователя ГДЕ uid IN (: userIds)")
Список <Пользователь> loadAllByIds (int [] userIds);
@Query ("ВЫБРАТЬ * ОТ пользователя WHERE first_name LIKE: first AND"
+ "last_name LIKE: last LIMIT 1")
Пользователь findByName (сначала строка, затем строка);
@Вставлять
void insertAll (Пользователь ... пользователи);
@Удалить
недействительное удаление (Пользователь-пользователь);
}Вывод
Эта статья дает вам базовые знания о компонентах архитектуры Android. Мы постарались включить все темы, связанные с недавно предложенной архитектурой Android, которые решают все соответствующие проблемы, с которыми сталкивается разработчик при разработке приложения. Тем не менее, если вы обнаружите какие-либо проблемы, подумайте о найме Android-разработчика Elsner Technology .
