기타개발
안드로이드에서 톤제너레이터(ToneGenerator)사용할때 크래시해결(kotlin)
rkrkrr0101
2022. 10. 27. 20:58
원인:안드로이드의 오디오 메모리 용량은 1mb라서 oom크래시나는거(라고 스택오버플로우에서 말함)
해결:
싱글톤처럼 한개만 유지하면서,완료되면 추가
함수밖에(귀찮아서 파일 내 전역으로(임포트 바로밑)에 선언했음)
private var toneGenerator:ToneGenerator?=null
선언후
fun beep( mediaFileRawId: Int,i : Int) {
try {
if (toneGenerator == null) {
toneGenerator = ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100)
}
toneGenerator!!.stopTone();
toneGenerator!!.startTone(mediaFileRawId, 200)
val handler = Handler(Looper.getMainLooper())
handler.postDelayed(Runnable {
if (toneGenerator != null) {
toneGenerator!!.release()
toneGenerator = null
}
}, 200)
} catch (e: Exception) {
}
}
i는 볼륨조절한다고 넣어둔건데 빼도됨,아마 stopTone도 뺴도될거같은데,안돼서 막넣어보다가 넣어둔건데 빼기귀찮아서 제거안함
사용시엔
beep(ToneGenerator.TONE_CDMA_ALERT_AUTOREDIAL_LITE,300)
핸들러는
import android.os.Handler
import android.os.Looper