반응형
Android Foreground Services 사용법
안녕하세요! 이번 포스트에서는 Android Foreground Services에 대해 알아보겠습니다. Foreground Service는 사용자가 앱과 상호작용하지 않더라도 백그라운드에서 지속적으로 실행되어야 하는 작업을 수행하는 데 사용됩니다. 아래는 Foreground Service 설정 방법에 대한 자세한 설명입니다.
1. 서비스 클래스 생성
먼저 Service를 상속받는 서비스 클래스를 정의합니다.
kotlin
class MyForegroundService : Service() {
private lateinit var notification: Notification
override fun onCreate() {
super.onCreate()
startForeground(1, createNotification())
}
private fun createNotification(): Notification {
val builder = NotificationCompat.Builder(this, "channel_id")
.setContentTitle("Foreground Service")
.setContentText("This is a foreground service")
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentIntent(PendingIntent.getActivity(this, 0, Intent(this, MainActivity::class.java), 0))
.setAutoCancel(false)
// android api 26 이상의 경우 필요
val channel = NotificationChannel("channel_id", "Channel Name", NotificationManager.IMPORTANCE_DEFAULT)
val notificationManager = getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(channel)
return builder.build()
}
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onDestroy() {
super.onDestroy()
stopForeground(true)
}
}
2. 서비스 시작
서비스를 시작하려면 액티비티나 프래그먼트에서 다음과 같이 호출합니다.
kotlin
val serviceIntent = Intent(this, MyForegroundService::class.java)
// android api 30 이상의 경우
startForegroundService(serviceIntent)
3. AndroidManifest.xml 설정
AndroidManifest.xml 파일에 서비스 선언을 추가합니다.
xml
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
<application
...
<service
android:name=".MyForegroundService"
android:exported="false"
android:foregroundServiceType="connectedDevice"
/>
</application>
4. Notification Channel 생성
앱이 Android Oreo(API 레벨 26) 이상을 타겟으로 하는 경우, Notification Channel을 생성해야 합니다.
kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel("channel_id", "Channel Name", NotificationManager.IMPORTANCE_DEFAULT)
val notificationManager = getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(channel)
}
5. Deprecated 메서드 대체
stopForeground 메서드가 deprecated 되었기 때문에, 대신 stopSelf 또는 stopService 메서드를 사용합니다.
kotlin
override fun onDestroy() {
super.onDestroy()
stopSelf()
}
6. 안드로이드 생명 주기와 서비스 관리
적절한 시점에 startService와 stopService를 호출하여 서비스의 시작과 종료를 관리해야 합니다. 예를 들어:
- onCreate() 또는 onStart(): 앱이 처음 실행될 때.
- onDestroy(): 앱이 종료될 때.
이 포스트가 Android Foreground Services 설정과 관리에 도움이 되길 바랍니다. 궁금한 점이 있으면 언제든지 댓글로 남겨주세요! 😊
반응형
'모바일 앱(안드로이드)' 카테고리의 다른 글
Android에서 WorkManager를 InitializationProvider로 설정하기 (0) | 2024.10.21 |
---|---|
Room Database Migration: 칼럼 추가와 데이터 타입 변경 (0) | 2024.10.19 |
Room DB와 LiveData를 사용한 데이터 삽입 및 중복 처리 (1) | 2024.10.15 |
Koin 4.0 릴리즈 이야기 ... 퍼옴 (2) | 2024.10.13 |
Jetpack Compose에서 Navigation 구현하기: compose-destinations와 AnimatedBottomBarCompose 사용 (0) | 2024.10.11 |