美文网首页
mediaplay踩坑

mediaplay踩坑

作者: Birdd | 来源:发表于2020-03-27 15:37 被阅读0次

    刚刚公司代码里发现个问题,记录一下,碰到的小伙伴参考一下

    坑一:

        public static void playSoundByMedia(int rawId,MediaPlayer.OnCompletionListener beepListener) {
            try {
                MediaPlayer mediaPlayer= null;
                if(mediaPlayer==null){
                    mediaPlayer = new MediaPlayer();
                }
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setOnCompletionListener(beepListener);
                try {
                    AssetFileDescriptor file = Utils.getApp().getResources().openRawResourceFd(
                            rawId);
                    mediaPlayer.setDataSource(file.getFileDescriptor(),
                            file.getStartOffset(), file.getLength());
                    file.close();
                    mediaPlayer.setVolume(0.50f, 0.50f);
                    mediaPlayer.prepare();
                    mediaPlayer.start();
                } catch (IOException e) {
                    LogUtils.e("tag","tts:IO:"+e.toString());
                    mediaPlayer = null;
                }
            } catch (Exception e) {
                LogUtils.e("tag","tts:"+e.toString());
                e.printStackTrace();
            }
    
        }
    

    第一次播放正常,后边就会出现断断续续的
    试了很多方法都不正常,后来发现,mediaplay不可以在放在方法里,这样,GC会提前回收,导致播放中断,正确处理办法是把它放到activity.

    坑二:

      SoundUtils.setMediaPlayer(speakText,mediaPlayer, new MediaPlayer.OnCompletionListener() {
                                @Override
                                public void onCompletion(MediaPlayer mp) {
                                    mediaPlayer.release();
                                    mediaPlayer=null;
                                }
                            });
    

    在播放完毕之后需要释放mediaplay,但注意,这里我们要释放的是java代码中的mediaplay,上面onCompletion返回的mp,这个其实是native里的mediaplay,虽然他们是一起工作的,但并不是一个东西,这时候释放了mp,并没有真正释放activity的mediaplay.所以要专门释放一下activity的mediaplay

    相关文章

      网友评论

          本文标题:mediaplay踩坑

          本文链接:https://www.haomeiwen.com/subject/ksgluhtx.html