332просмотров
13.2%от подписчиков
25 марта 2026 г.
questionScore: 365
🤔 Расскажи подробно, что из себя представляет каждый компонент Аndroid-приложения? Android-приложение состоит из четырёх основных компонентов: Activity – UI-экран приложения. Service – фоновая работа без UI. BroadcastReceiver – слушает системные и пользовательские события. ContentProvider – делится данными между приложениями. 🚩Activity – экран приложения (UI) Отображает интерфейс пользователя. Обрабатывает взаимодействие (нажатия, свайпы, ввод текста). Управляется системой через жизненный цикл (Lifecycle). Пример Activity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Загружаем XML-разметку }
} 🚩Service – фоновая работа без UI Выполняет длительные фоновые задачи (музыка, загрузка файлов). Может работать даже если приложение закрыто. НЕ имеет UI (не рисует View). Пример Service
class MyService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Thread { // Долгая фоновая задача }.start() return START_STICKY } override fun onBind(intent: Intent?): IBinder? = null
} Запуск сервиса startService(Intent(this, MyService::class.java)) Остановка сервиса stopService(Intent(this, MyService::class.java)) 🚩BroadcastReceiver – обработка событий (системных и пользовательских) - Получает события системы (BOOT_COMPLETED, BATTERY_LOW). - Слушает события других приложений. - Может быть динамическим (через код) или статическим (AndroidManifest.xml). Пример BroadcastReceiver (отключение Wi-Fi) class NetworkReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) { println("Сеть изменилась!") } }
} Регистрируем BroadcastReceiver в AndroidManifest.xml <receiver android:name=".NetworkReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter>
</receiver> Можно зарегистрировать динамически в коде val receiver = NetworkReceiver()
registerReceiver(receiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) 🚩ContentProvider – обмен данными между приложениями - Дает доступ к данным *другим приложениям. - Позволяет безопасно работать с БД (Room, SQLite). - Используется для Contacts, MediaStore, Calendar. Пример ContentProvider (чтение контактов) val cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
cursor?.use { while (it.moveToNext()) { val name = it.getString(it.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) println("Контакт: $name") }
} Запрос данных через Uri val uri = Uri.parse("content://com.example.provider/table")
contentResolver.query(uri, null, null, null, null) 🚩Как компоненты взаимодействуют между собой? Пример: Activity запускает Service через Intent startService(Intent(this, MyService::class.java))
Пример: Service отправляет Broadcast, а Receiver его ловит sendBroadcast(Intent("com.example.CUSTOM_EVENT")) Ставь 👍 и забирай 📚 Базу знаний