2012-10-26 3 views
2

내 활동에 두 개의 사운드 풀을 사용하고 싶습니다. 하나는 언로드하고 때로는 해제하고 다른 사운드로로드 한 다음 다시 언로드/릴리스하고 다른 사운드와 함께 다시 사용하고 다른 사운드는 항상 동일한 사운드를 포함하며 언로드되지 않습니다. 나는 문서에서 이것에 관한 어떤 단어도 찾지 못했고, 그래서 그것은 나에게 어떤 종류의 문제를 일으킬 것인가? SoundPool 대신 MediaPlayer에서 상수 사운드를 사용한다면? 메모리 누수 또는 문제가 발생합니까?2 개의 사운드 풀을 사용하면 어떤 종류의 메모리 누수가 발생합니까?

+0

나에게 잘 들리는 소리 – keyser

답변

3

SoundPoolMediaPlayer 개체를 Activity 수명주기 측면에서 올바르게 처리하면 메모리 누수 또는 사운드 재생 문제가 발생하지 않습니다 (아래 참조).

우선 "너무 많습니다"SoundPoolMediaPlayer 개체를 생성해서는 안됩니다. 이는 기기의 실제 상태에 따라 다르지만 2 SoundPool 개체를 사용하면 괜찮을 것입니다. 4 MediaPlayer 개체를 동시에.

설명 : 각 SoundPool 한 기본 AudioTrack를 보유하고, 각 MediaPlayer은 하나의 기본 AudioTrack를 보유하고 있습니다. 따라서 2 SoundPool 및 4 MediaPlayer 개체를 사용하면 6 개의 기본 AudioTrack 개체를 사용하게됩니다. 일반적으로 시스템에는 더 많은 무료 AudioTrack 개체가 있으므로 일반적으로 문제가 없습니다. (자세한 내용은 this topic를 참조하십시오.)

당신의 구체적인 질문에 대해서는 : 예, 그것만큼 당신이 계정에 다음과 같은 점을 같이 영구적 인 SoundPool하고 때로는/해제를 다시 다른 SoundPool을 사용하는 것도 괜찮습니다 : 활동의 onPause() 또는 onStop() 이벤트 핸들러에서

  • , 당신은 네이티브 리소스를 사용, 릴리스 모든SoundPoolMediaPlayer 개체를해야하기 때문이다. 그런 다음 onResume() 또는 onStart()에서 다시 만들 수 있습니다. 그러므로 문 "... 결코 언로드되지 않습니다." 라이프 사이클 동안 SoundPoolMediaPlayer의 상태를 처리해야하므로이 의미에서은 올바르지 않습니다.
+1

자세한 답변을 보내 주셔서 감사합니다! 실제로 20 대 25의 미디어 플레이어 사운드를 재생하려고 할 때 마지막 8-9가 재생되지 않았지만 처음 15 ~ 16 건은 잘 연주 되었기 때문에 실제로 질문했습니다. 나는 SoundPool로 바꿨지 만 이제는 처리 할 수 ​​있지만 MediaPlayer 객체의 하드 한도에 대해서는 매우 궁금 할 것입니다. –

+1

안드로이드의 이론적 인 한계는 장치 당 32 개의 기본 AudioTrack입니다 (즉, SoundPool, MediaPlayer 및 기타 AudioTrack 기반 개체의 총 수가 32를 초과 할 수 없음을 의미). 글렌 카스텐 (Glenn Kasten)이 제가 링크 된 기사에서 지적했듯이, 실제 이용 가능한 트랙의 수는 확실히 적습니다. 이것은 시스템 및 다른 응용 프로그램에서도 사용할 수 있기 때문입니다. 따라서 하드 한도에 대한 귀하의 질문은 정확한 값으로 응답 할 수 없습니다. 이는 기기 (즉, 제조업체), 기기 상태 (실행중인 항목) 등에 따라 다를 수 있기 때문입니다. –

+1

명확한 설명 주셔서 감사합니다. –

관련 문제