MediaPlayer 클래스 사용과 실습 (안드로이드 4대 구성요소 서비스)

2022. 7. 11. 18:05개발/안드로이드

MediaPlayer 클래스

파일 로드하기 :

prepare(), prepareAsync(), setDataResource() 함수를 사용하여 파일을 로드시켜줌.

prepare은 메인 스레드에서 실행. prepareAsync()는 백그라운드 스레드를 이용.

prepare은 앱 응답 없음, ANR을 발생할 수도 있으나 후자는 그런 걱정이 없음.

 

파일 재생하기 :

start() 함수로 재생하고, pause() 함수로 일시멈춤합니다.

 

파일 멈추기 : 현재 재생되는 미디어를 reset() 함수를 호출해 멈출 수 있고, MediaPlayer 객체도 초기화시킬 수 있다.

이 함수 이후에 새로운 미디어를 준비한 후 재생하면 됨.

 

음악 길이 찾기 : getDuration() 함수로 음악의 길이를 얻을 수 있음.

단위는 밀리초로 반환.

 

특정 구간으로 이동하기 : seekTo() 함수로 특정 위치로 이동함.

 

자원 해제하기 : release() 함수를 통해 사용하던 메모리와 자원들을 해제시켜줄 수 있음.

사용하지 않으면 꼭 호출.

 

서비스

서비스는 백그라운드에서 꺼지지 않고 작업을 수행하는 안드로이드 4대 구성요소 중하나.

사용자와 인터랙션을 하지 않아도 오랫동안 실행되어야 함. 멈추라고 명령하기 전까지는 멈추면 안됨.

(음악 앱에서 앱을 끄더라도 백그라운드에서 계속 실행됨.)

 

 

서비스를 시작하려면 startService() 함수를 액티비티나 다른 서비스에서 실행.

위 함수 호출 후 onCreate() 와 onStartCommand()가 차례로 호출이 되어 시작된 상태가 됨.

한 번 시작된 서비스는 stopSelf()함수로 알아서 중지하거나, 다른 구성요소가 stopService()를 호출하여

서비스를 종료시키기 전까지 계속 실행 중인 상태로 존재함.

위 두 가지 함수가 실행이 되면 onDestroy()함수가 호출되어 서비스가 완전히 종료 됨.

onCreate 함수 는 서비스를 시작하면 딱 한 번 실행이 되기 때문에 

딱 한 번만 수행되어야 하는 작업은 onCreate() 함수를 이용함.

 

바인드된 서비스

 

바인드된 서비스란 다른 구성요소와 연결이 된 서비스라는 뜻.

액티비티가 서비스와 바인딩이 되었다면 액티비티는 서비스에 정의된 함수를 사용할 수 있다.

또한 서비스에 요청을 보내 응답을 받을 수 있다. 마치 서버(서비스)와 클라이언트(다른 구성요소)의 관계를 이룸.

바인드된 서비스는 기본적으로 다른 구성요소들에 바인드된 동안에만 실행됨. 계속 백그라운드에서 실행되는 것은 아님.

예를 들면 음악 앱에서 서비스를 실행한 후 음악을 재생하면 앱에서 나가더라도 계속 재생이 된다.

다시 앱을 실행하면 바로 액티비티가 서비스와 바인드되고 재생을 컨트롤할 수 있게 됨.

특정 구성요소가 서비스와 바인드하려면 bindService() 를 호출하면 된다.

bindService는 인텐트 객체와 Service Connection 구현 객체,

그리고 Context.BIND_AUTO_CREATE()를 인수로 받는다. bind 했을 때 서비스가 null이면 서비스의 onCreate를 실행

구성요소와 서비스가 바인딩 되면 onServiceConnected() 함수가 호출됨.

onServiceConnected 함수는 통신을 담당하는 IBinder 객체를 전달받음.

(추후 예정)

반응형