반응형
안드로이드에서 startService 및 startForegroundService 메서드는 서비스를 시작하는 데 사용되는 메서드입니다. 이 두 메서드의 차이점은 Android 8.0 (Oreo)부터 도입된 백그라운드 실행 제한에 있습니다.
- startService: 서비스를 시작하며, 서비스가 시작된 후에 해당 서비스가 백그라운드에서 실행되는 한 시스템이 종료시키지 않습니다. 그러나 이 메서드를 사용하면 서비스가 포그라운드 서비스로 시작되지 않으므로, 서비스가 백그라운드에서 실행 중이더라도 일정 시간이 지나면 시스템에 의해 종료될 수 있습니다.
- startForegroundService: Android 8.0 이상에서 도입된 메서드로, 포그라운드 서비스로 서비스를 시작합니다. 포그라운드 서비스는 사용자에게 노티피케이션을 통해 서비스가 실행 중임을 알리며, 시스템이 백그라운드 서비스를 쉽게 종료하지 않도록 합니다.
아래 코드는 서비스 실행 및 서비스 중복 실행 방지 코드입니다.
private boolean isServiceConnected = false;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
isServiceConnected = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
isServiceConnected = false;
}
};
// 서비스 시작 시 호출되는 메서드
public void startService() {
if (!isServiceConnected) {
Intent serviceIntent = new Intent(this, YourService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(serviceIntent);
} else {
startService(serviceIntent);
}
// 서비스와 연결
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}
}
반응형
'프로그램 개발해서 돈벌기 > Android' 카테고리의 다른 글
안드로이드 13 (Target SDK API 33) 이후부터 포그라운드 서비스 시작 시 자동으로 시작하던 알림(Local Notification)이 동작되지 않는 경우 해결 방법 (0) | 2023.09.20 |
---|---|
[Java] 안드로이드에서 크롬캐스트 연결 시 "전송 대상" 선택 후 앱 죽는 현상에 대한 해결 방법 (0) | 2023.06.27 |
[Java] 안드로이드 서비스에서 Local Notification 보내기 (0) | 2023.06.26 |
[Java] 안드로이드 Activity와 Forground Service에서 위치 값 가져오기 (0) | 2023.06.26 |
[Java] 안드로이드에서 싱글톤(Singleton) 클래스와 사용법 예제 (0) | 2023.06.26 |
댓글