모각코 9회차(11.18)

기먼지·2022년 11월 30일
0

모각코코볼

목록 보기
9/11

서비스(Service)

  • 시간이 오래 걸리는 작업을 백그라운드에서 수행
  • 액티비티와 달리 UI를 가지지 않는 앱 구성 요소
  • 서비스의 사용 예: 음악 재생이나 파일 다운로드

-서비스의 작동

  • 클라이언트: 서비스를 사용하는 앱 구성 요소. 대개는 액티비티
  • 시작된 서비스: 클라이언트가 인텐트에 실어 보낸 데이터를 받아 처리하고 끝냄
  • 바인드된 서비스: 클라이언트와 서비스 사이에 생성된 연결 통로. 데이터를 받아 처리한 후 결과 리턴
public class MyService extends Service {
   @Override
   public void onCreate() {
      // 서비스 생성 시 수행할 코드를 여기에 작성한다.
   }
   
   @Oerride
   public int onStartCommand(Intent intent, int flags, int startId) {
      // 시작된(Started) 서비스가 수행할 코드를 작성하되,
      // 시간이 오래 걸리는 작업은 스레드를 생성하여 처리한다.
      return START_STICKY;
   }
   
   @Override
   public IBinder onBind(Intent intent) {
      // 바인드된(bound) 서비스가 클라이언트와의 통신을 위한
      // IBinder 타입 객체를 리턴하는 코드를 작성한다.
      return null;
   }
   
   @Override
   public void onDestroy() {
      // 서비스 종료 시 수행할 코드를 작성한다.
   }
}

-시작된 서비스 작성

  • [필수] Service 클래스를 상속받아 서비스 클래스를 생성한다.
  • [필수] onStartCommand() 메서드를 재정의하고 수신된 인텐트를 처리하는 코드를 작성한다. 간단한 작업은 곧바로 처리하면 되지만, 시간이 오래 걸릴 작업이면 스레드를 생성하여 처리한다.
  • [선택] 작업 처리가 끝나면 stopSelf()를 호출하여 서비스 스스로 중지(종료)한다.

-시작된 서비스 사용

  • [필수] 명시적 인텐트를 준비하고 startService()를 호출하여 서비스를 시작한다. 동일 서비스에게 서로 다른 작업을 지시하고 싶다면 명시적 인텐트에 포함되는 부가 정보를 다르게 하여 매번 startService()를 호출하면 된다.
  • [선택] 명시적 인텐트를 준비하고 stopService()를 호출하여 서비스를 중지(종료)시킨다.

-바인드된 서비스 작성

  • [필수] Service 클래스를 상속받아 서비스 클래스를 생성한다.
  • [필수] Binder 클래스를 상속받아 바인더 클래스를 정의하고, 임의의 메서드를 하나 추가하여 현재의 서비스 객체를 리턴하는 코드를 작성한다.
  • [필수] onBind() 메서드를 재정의하고 바인더 객체를 생성하여 리턴하는 코드를 작성한다. 리턴된 바인더 객체는 클라이언트 측에서 bindService()를 호출하여 얻을 수 있다.
  • [필수] 클라이언트를 위해 작업을 처리할 서비스 메서드를 추가한다. 서비스 메서드의 형태와 개수에 제약은 없다.

-바인드된 서비스 사용

  • [필수] ServiceConnection 인터페이스를 구현하는 객체를 생성한다. ServiceConnection 객체는 서비스와의 연결을 감시하는 역할을 한다.
  • [필수] 명시적 인텐트를 준비하고 bindService()를 호출하여 서비스와 연결한다. 이때 ServiceConnection 객체를 bindService()에 넘겨주어 서비스와 연결이 성공하거나 연결이 강제로 끊어지는 상황을 감지한다.
  • [필수] 서비스와 연결이 성공하면 ServiceConnection 객체의 onServiceConnected() 메서드가 호출되어 바인더 객체가 리턴된다. 바인더 객체의 메서드를 호출하면 서비스 객체를 얻을 수 있다.
  • [필수] 서비스 객체를 통해 서비스 메서드를 호출하여 서비스가 제공하는 기능을 자유롭게 사용한다.
  • [필수] 명시적 인텐트를 준비하고 unbindService()를 호출하여 서비스와 연결을 해제한다.
profile
열심히 굴러가기 !

0개의 댓글