서비스 (Service)
화면 없이 백그라운드에서 실행되는 프로세스를 의미한다.
|
Service를 상속받는 Calss를 생성한다 |
Class 생성 후 우클릭 > Generate > Override 를 통해 필요한 함수들을 구현한다.
Service 시작하기
MainActivity에서 Service로 데이터 전달하기 위해서는 putExtra()를 이용한다.
// Service class의 class를 Intent로 생성한다
intent = new Intent(this, ServiceSleep.class);
// key - value 로 값을 저장해 전달할 수도 있다
intent.putExtra("comman", "show");
// Service를 시작한다
startService(intent);
Service Class 내에서 onStartCommand 를 통해 전달 받은 Intent를 처리한다. getStringExtra("KEY") 와 같은 함수로 값을 가져온다.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null) {
return Service.START_STICKY;
} else {
// Intent 처리 MainActivity에서 "command"라는 이름으로
// 데이터를 저장했기 때문에 가져올 때도 "command"로 가져오면된다.
intent.getStringExtra("command");
}
return super.onStartCommand(intent, flags, startId);
}
onDestroy에서 Service를 종료시켜줘야 한다.
stopService(intent);
Service에서 MainActivity로 데이터 전달
마찬가지로 서비스 실행 중에 데이터를 Intent에 저장해 MainActivity로 전달할 수 있다.
final Intent sintent = new Intent(getApplicationContext(), MainActivity.class);
sintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
sintent.putExtra("command", "ImageService");
sintent.putExtra("cnt", i);
startActivity(sintent);
MainActivity에서는 onNewIntent 함수를 Override 하면된다.
Service에서 startActivity()를 호출하면 이 함수로 Service의 Intent가 전달된다.
@Override
protected void onNewIntent(Intent intent) {
if (intent != null) {
processIntent(intent);
}
}