안드로이드에서 서비스(Service)는 백그라운드에서 실행되는 컴포넌트로, 사용자가 앱과 상호작용하지 않는 동안에도 작업을 수행할 수 있습니다. 서비스는 일반적으로 네트워크 요청, 파일 I/O, 데이터베이스 작업과 같은 장기 실행 작업을 수행하는 데 사용됩니다. IntentService는 백그라운드에서 인텐트(intent)를 처리하는 특수한 유형의 서비스입니다.
1. 서비스(Service)
서비스는 안드로이드 애플리케이션에서 장기 실행 작업을 수행하기 위한 기본적인 백그라운드 컴포넌트입니다.
주요 특성:
- 생명주기 메서드:
onCreate(),onStartCommand(),onDestroy() - 두 가지 유형:
- Started Service:
startService()를 통해 시작되고, 작업이 완료될 때까지 계속 실행됩니다. - Bound Service:
bindService()를 통해 다른 컴포넌트에 바인딩되어 실행됩니다.
간단한 예제:
이 예제는 서비스가 시작되고 로그 메시지를 출력하는 간단한 MyService를 구현합니다.
1. 서비스 클래스 정의 (MyService.java):
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Service Created");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Service Started");
// 여기에 작업을 추가
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Service Destroyed");
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
2. AndroidManifest.xml에 서비스 등록:
<service android:name=".MyService"/>
3. 서비스 시작과 종료 (MainActivity.java):
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 서비스 시작
Intent intent = new Intent(this, MyService.class);
startService(intent);
// 서비스 종료
// stopService(intent);
}
}
2. IntentService
IntentService는 Service를 상속받아 백그라운드에서 작업을 처리하고, 작업이 완료되면 자동으로 종료됩니다.
주요 특성:
- 자동 종료: 작업이 완료되면
IntentService는 자동으로 종료됩니다. - 작업 큐: 여러 인텐트를 순차적으로 처리합니다.
- 백그라운드 스레드: 모든 작업이 별도의 백그라운드 스레드에서 수행됩니다.
간단한 예제:
이 예제는 IntentService를 사용하여 간단한 백그라운드 작업을 수행합니다.
1. IntentService 클래스 정의 (MyIntentService.java):
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
import androidx.annotation.Nullable;
public class MyIntentService extends IntentService {
private static final String TAG = "MyIntentService";
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
if (intent != null) {
Log.d(TAG, "IntentService Started");
// 여기에 작업을 추가
Log.d(TAG, "Task Completed");
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "IntentService Destroyed");
}
}
2. AndroidManifest.xml에 IntentService 등록:
<service android:name=".MyIntentService"/>
3. IntentService 시작 (MainActivity.java):
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// IntentService 시작
Intent intent = new Intent(this, MyIntentService.class);
startService(intent);
}
}
요약
- 서비스: 백그라운드에서 장기 실행 작업을 수행할 때 사용.
startService()를 통해 시작되고 수동으로 종료해야 합니다. - IntentService: 백그라운드 작업을 순차적으로 처리하고 자동으로 종료되는 특수한 서비스.
onHandleIntent()메서드 내에서 작업을 처리합니다.
이 두 가지 서비스를 사용하여 안드로이드 애플리케이션에서 효율적으로 백그라운드 작업을 처리할 수 있습니다.
