서비스

1. 서비스 개요

1.1 서비스 (Service) 란?

1.2 서비스의 종류

1.3 서비스 컴포넌트 기본

2. 시작된 서비스 구현하기

2.1 프로젝트 및 서비스 컴포넌트 생성

  1. AndroidStudio에서 MusicService 이름의 프로젝트를 생성한다.
  2. AndroidStudio에서 File-New-Service-Service 메뉴 선택
  3. Configure Component 화면에서 Class Name으로 MusicService 입력후 Finish 버튼 클릭

2.2 서비스 클래스 구현

2.3 메인 액티비티 클래스와 화면 레이아웃 클래스 완성하기

2.4 실행 결과 확인

  1. MusicService 앱을 실행하고, 시작 버튼을 클릭하여 음악을 연주한다.
  2. 디바이스의 뒤로가기 버튼을 눌러 앱을 종료하여도 음악이 계속 연주되는 것을 확인한다.
  3. MusicService 앱을 다시 시작하여 중지 버튼을 클릭하여 음악 연주를 중단한다.
  4. 디바이스의 개요 버튼을 눌러 최근 작업한 앱의 미리보기 이미지 목록을 엽니다.
  5. 목록에서 MusicService 앱을 탭하여 다시 시작한 후, 시작 버튼을 클릭하여 음악 연주를 연주한다.
  6. 디바이스의 개요 버튼을 눌러 최근 작업한 앱의 미리보기 이미지 목록을 열고, MusicService 앱을 스와이프하여 목록에서 삭제한다.
  7. 음악 연주 상태를 확인한다.

3. 바인딩된 서비스 구현하기

3.1 바인더 클래스 확장 방법

3.2 예제 (MusicBoundService)

3.2.1 MusicBoundService 클래스 구현

3.2.2 MainActivity 클래스 구현

  1. 서비스와의 연결 상태를 모니터링하는 ServiceConnection 구현 객체 생성
  2. 클라이언트는 bindService() 를 호출하여 서비스에 바인딩합니다.
  3. Android 시스템이 클라이언트와 서비스 사이에 연결을 설정하면 ServiceConnection 객체의 onServiceConnected()을 호출합니다.
  4. 클라이언트는 확보된 서비스 객체 인스턴스를 통해 서비스 객체의 공개 메소드를 사용합니다.

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button start = findViewById(R.id.start);
            start.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //4. 서비스 객체의 공개 메소드 사용
                    mService.startPlaying();
                }
            });
    
           // ...생략
        }
    
        MusicBoundService mService;
        boolean mBound = false;
    
       // 1. 서비스와의 연결 상태를 모니터링하는 ServiceConnection 구현 객체 생성
        private ServiceConnection mConnection = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                MusicBoundService.LocalBinder binder = (MusicBoundService.LocalBinder)service;
    
                // 3. 클라이언트는 바인딩된 서비스 객체 인스턴스를 얻습니다.
                mService = binder.getService();
                mBound = true;
            }
    
            @Override
            public void onServiceDisconnected(ComponentName name) {
                mBound = false;
            }
        };
    
        @Override
        protected void onStart() {
            super.onStart();
    
            // 2. 클라이언트는 bindService() 를 호출하여 서비스에 바인딩합니다.
            bindService(new Intent(MainActivity.this, MusicBoundService.class),
                    mConnection, Context.BIND_AUTO_CREATE);
        }
    
        @Override
        protected void onStop() {
            unbindService(mConnection);
            super.onStop();
        }
    }