Correção de ANR ao tocar som na thread principal#8
Conversation
…round_task.service.ForegroundService.playCustomSound - https://console.firebase.google.com/project/map-for-work-asset-113551911/crashlytics/app/android:br.com.urbanonorte.passenger.drivermachine/issues/f76ca43dde5ba1f33aba4c88c127bd64?time=1779494400000:1782172799000&sessionEventKey=6A387FE4003400016EFA3859A2A33C3C_2232722745157037715
|
✅ Review postada — #8 (review) job_id: |
|
|
||
| override fun onDestroy() { | ||
| super.onDestroy() | ||
| soundExecutor.shutdown() |
There was a problem hiding this comment.
Sugestão (não bloqueia) — soundExecutor.shutdown() só sinaliza que não aceita mais tarefas, mas se houver uma reprodução em andamento no momento do onDestroy, ela continua até terminar. Se o objetivo é encerrar sons pendentes quando o serviço morre, considere soundExecutor.shutdownNow() (interrompe a task em andamento). Como Ringtone.play() é curto e não bloqueante prolongado, o shutdown() atual é aceitável — só vale citar.
| soundExecutor.execute { | ||
| try { | ||
| val r = RingtoneManager.getRingtone(applicationContext, uri) | ||
| r?.play() |
There was a problem hiding this comment.
Nit — o Ringtone obtido via RingtoneManager.getRingtone() não é liberado explicitamente. Em execuções repetidas (várias chamadas API_UPDATE seguidas), pode acumular instâncias vivas até GC. Não é blocker (o código anterior já tinha o mesmo comportamento), mas pra futura evolução vale considerar MediaPlayer com release() no setOnCompletionListener, ou manter referência única do Ringtone e chamar stop() antes de reproduzir de novo.
Resolve a ANR com.pravera.flutter_foreground_task.service.ForegroundService.playCustomSound, que ocorre no playCustomSound:
