Android, MediaPlayer IllegalStateException 상황
참고 : http://developer.android.com/reference/android/media/MediaPlayer.html
TF에서 MediaPlayer를 Override할 일이 생겨 테스트하는데 Play/Stop을 하면 연신 IllegalStateException를 일으킨다.
MediaPlayer문서를 보니 답이 있다. 잊기전에 주요한 내용들 정리해보자.
TF에서 MediaPlayer를 Override할 일이 생겨 테스트하는데 Play/Stop을 하면 연신 IllegalStateException를 일으킨다.
MediaPlayer문서를 보니 답이 있다. 잊기전에 주요한 내용들 정리해보자.
- 아래 State Diagram는 MediaPlayer가 사용자 액션을 받아 취해지는 상태(State)를 의미
- 객체가 생성되면 Idle상태에서 사용자 이벤트(메소드호출)에 따라 상태가 변함,
(편의를 위해 만든 create는 Initialized상태로 됨.) - 촉이 한개인 화살표는 Sync, 쌍촉? 화살표는 Async로 이벤트가 처리되는 것을 의미
- [중요] 상태(State)흐름이 Stopped가 되면 그 상태에서 Paused, Started, PlaybackCompleted로 이동하지 못한다. 즉, stop()메소드가 불러지면 start(), seekTo(), pause() 메소드를 다시 부를 수 없다는 의미이다.
내가 혼돈했던것이 이부분이다. 보통 Start/Stop을 할 수 있다고 생각하지 않나? 그건 내생각이고 그 원하는 바로 되려면 Start/Pause이다. Stop된 객체를 다시 Start하고 싶으면 Prepare()해야한다. - 이렇게 State이동을 잘못하면 IllegalStateException이 발생한다.
- MediaPlayer를 이용한 작업을 마치면 반드시 release()를 해서 리소스 반환
- MediaPlayer 객체를 생성하는 방법 create()와 new, create()를 사용하면 바로 Initialized상태로 진입, new를 사용하면 Idle상태로 진입.
당연한것이 create()를 할때 datasource를 넣어 객체를 한다.
도움 많이 되었습니다. 감사합니다.
답글삭제많은도움 됐습니다. 감사합니다!
답글삭제