Android, MediaPlayer IllegalStateException 상황

참고 : http://developer.android.com/reference/android/media/MediaPlayer.html

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를 넣어 객체를 한다. 




댓글

  1. 도움 많이 되었습니다. 감사합니다.

    답글삭제
  2. 많은도움 됐습니다. 감사합니다!

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Protopage.com

Redis 설치 & 사용