WordPress DemoSite

Тестовый сайт для экспериментов и демонстраций возможностей

AAC (Android Architecture Components) — набор компонентов для построения устойчивой архитектуры Android-приложений

AAC — это библиотеки от Google, которые помогают разрабатывать гибкие, тестируемые и поддерживаемые приложения, решая ключевые проблемы:


🔥 Основные компоненты AAC

1. ViewModel

Хранит и управляет UI-данными, переживая изменения конфигурации (например, поворот экрана).

Пример:

class MyViewModel : ViewModel() {  
    private val _data = MutableLiveData<String>()  
    val data: LiveData<String> get() = _data  

    fun loadData() {  
        _data.value = "Hello from ViewModel!"  
    }  
}  

// В Activity/Fragment:  
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)  
viewModel.data.observe(this) { value ->  
    textView.text = value  
}  

2. LiveData

Observable-холдер данных, который учитывает жизненный цикл (автоматически отписывается при onDestroy).

Особенности:

3. Room

Библиотека для работы с SQLite, превращающая БД в Kotlin/Java-объекты.

Пример:

@Entity  
data class User(@PrimaryKey val id: Int, val name: String)  

@Dao  
interface UserDao {  
    @Query("SELECT * FROM user")  
    fun getAll(): LiveData<List<User>>  
}  

@Database(entities = [User::class], version = 1)  
abstract class AppDatabase : RoomDatabase() {  
    abstract fun userDao(): UserDao  
}  

// Использование:  
val db = Room.databaseBuilder(context, AppDatabase::class.java, "app-db").build()  
db.userDao().getAll().observe(this) { users ->  
    // Обновление UI  
}  

4. DataBinding

Связывает UI-элементы напрямую с данными (уменьшает boilerplate-код).

Пример:

<layout>  
    <data>  
        <variable name="user" type="com.example.User"/>  
    </data>  
    <TextView  
        android:text="@{user.name}" />  
</layout>  

5. Navigation

Управление навигацией между фрагментами (замена FragmentManager).

Пример:

<navigation>  
    <fragment  
        android:id="@+id/fragmentA"  
        app:destination="@id/fragmentB" />  
</navigation>  

6. WorkManager

Фоновые задачи, которые выполняются даже после перезапуска приложения.

Пример:

val uploadWork = OneTimeWorkRequestBuilder<UploadWorker>().build()  
WorkManager.getInstance(context).enqueue(uploadWork)  

Почему AAC?

Стандарт от Google (интеграция с Jetpack).
Избегание утечек памяти.
Упрощение тестирования (ViewModel и LiveData легко тестируются).
Сохранение данных при повороте экрана.


🛠 Пример архитектуры с AAC (MVVM)

// Model (Room Entity)  
@Entity  
data class Note(@PrimaryKey val id: Int, val text: String)  

// Repository  
class NoteRepository(private val dao: NoteDao) {  
    fun getNotes(): LiveData<List<Note>> = dao.getAll()  
}  

// ViewModel  
class NotesViewModel(repository: NoteRepository) : ViewModel() {  
    val notes = repository.getNotes()  
}  

// View (Activity/Fragment)  
val viewModel: NotesViewModel by viewModels()  
viewModel.notes.observe(this) { notes ->  
    adapter.submitList(notes)  
}  

📊 Сравнение AAC с другими подходами

КритерийAAC (MVVM)MVPMVC (устарел)
СвязностьНизкая (LiveData)СредняяВысокая
ТестируемостьВысокаяВысокаяНизкая
Жизненный циклАвтоматическийРучнойРучной

🚀 Как начать?

  1. Добавьте зависимости в build.gradle:
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0"  
implementation "androidx.room:room-ktx:2.5.0"  
  1. Используйте шаблон «MVVM с AAC» в новом проекте Android Studio.

💡 Советы

Не храните контекст в ViewModel (используйте AndroidViewModel если нужно).
Комбинируйте LiveData с корутинами (liveData { emit(data) }).
Используйте SavedStateHandle для сохранения состояния при убийстве процесса.


🔥 Вывод

AAC — это стандартный способ построения современных Android-приложений, который:
✔ Упрощает работу с данными и жизненным циклом.
✔ Предотвращает утечки памяти.
✔ Подходит для MVVM и Clean Architecture.

Что изучать дальше?

Полный стэк: .NET | AMQP | Android | api | Bash | Bootstrap | C++ | cms | Composer | css | Data | Elasticsearch | ESP32 | Git | GraphQL | Gulp | JavaScript | JetStream | Joomla | js | Kotlin | Laravel | LEMP | Linux | LMS | Markdown | MODX | Moodle | MySQL | NATS | Nginx | Node.js | OpenCart | Parsedown | PHP | Python | RabbitMQ | SCSS | SEO | Simpla | SOAP | SQL | startup | Swift | Symfony | Tailwind | Translation | Twig | Ubuntu | Unit | web3 | Webasyst | Webpack | WebSocket | WordPress | XML | Бизнес | блокчейн | ИИ | интернет-магазин | ЛК | Руководство | ТЗ | фреймворк | Яндекс.Трекер