手持ちのAndroid端末をAndroid7(Nougat)に更新したところ
現在開発中のアプリ(レトロゲーム風RPG)の効果音が鳴らなくなった。
https://play.google.com/store/apps/details?id=com.game.sh_crew.rebuildingsaga
アプリ起動直後には効果音が鳴っているのだが
あるタイミングを境に、効果音がまったく鳴らなくなってしまった。
戦闘のBGMなどは影響がないため
原因を調査したところ
BGM・効果音ともにMediaPlayerクラスを用いていたが
効果音のみMediaPlayerインスタンスの解放処理を実施していないことが原因だった。
■修正前
try
{
mp = MediaPlayer.create(activity.getApplicationContext(), res);
mp.start();
}
catch (Exception e)
{
RsLogger.error("Music Error.", e);
}
■修正後
try
{
// すでにMediaPlayerが生成されているか?
if (mp != null)
{
// リリース
mp.reset();
mp.release();
mp = null;
}
mp = MediaPlayer.create(activity.getApplicationContext(), res);
mp.start();
}
catch (Exception e)
{
RsLogger.error("Music Error.", e);
}
BGMの方はrelease処理が実装されているため、きちんと音が流れ続けていた。
Android7以前はreleaseしなくても問題なかったのだが……。
きちんとリソースは解放しなきゃいけないということですね。
(そもそも効果音ならSoundPoolクラスを用いるべきだったのかも)
ネットを調べると、音が鳴らなくなる現象が結構発生しているみたい。
同じような現状が発生しているアプリは
リリース処理が漏れているのかもしれないなあ。