Service là component chạy việc không cần UI. Nó chạy trên main thread của process, nên việc nặng vẫn phải tự đẩy sang coroutine hoặc thread khác.
Ba dạng:
- Started service (startService): chạy đến khi tự stopSelf() hoặc bị dừng.
- Foreground service: bắt buộc hiện notification, dành cho việc người dùng đang nhận biết — phát nhạc, chỉ đường, ghi âm, cuộc gọi.
- Bound service (bindService): cung cấp API cho component khác gọi vào, sống khi còn client đang bind.
Từ Android 8 (API 26), app ở nền không được chạy background service tự do — sau vài phút hệ thống sẽ dừng nó. Từ Android 14, mỗi foreground service phải khai báo type trong manifest (mediaPlayback, location, dataSync...) kèm permission tương ứng.
<service
android:name=".PlayerService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" />Chọn công cụ theo loại việc:
- Người dùng đang thấy/nghe → foreground service.
- Việc hoãn được nhưng phải chắc chắn chạy (đồng bộ, upload log) → WorkManager.
- Việc chỉ cần khi màn đang mở → coroutine trong viewModelScope.
Lưu ý: dùng Service cho việc lẽ ra thuộc WorkManager là lỗi hay gặp — service sẽ bị OS dừng ngang, còn khai báo foreground service type sai mục đích có thể bị Google Play từ chối.