Android媒体播放器导致“死线程”消息

Android媒体播放器导致“死线程”消息,第1张

概述我从后台服务(IntentService)开始发出声音,该声音由系统警报触发(当声音结束时,服务的线程通常会死亡). 相关代码是这样的: Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);if (alert == null) alert = RingtoneManager.getDe 我从后台服务(IntentService)开始发出声音,该声音由系统警报触发(当声音结束时,服务的线程通常会死亡).

相关代码是这样的:

Uri alert = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_NOTIFICATION);if (alert == null)     alert = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_ringtone);MediaPlayer mMediaPlayer = new MediaPlayer();mMediaPlayer.setDataSource(this,alert);final AudioManager audioManager = (AudioManager) getSystemService(Context.AUdio_SERVICE);if (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) != 0) {    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);    mMediaPlayer.setLooPing(false);    mMediaPlayer.prepareAsync();    mMediaPlayer.start();}

这个东西工作正常,但每次播放声音时,我都会在log cat中得到这个:

WARN / MessageQueue(7508):处理程序{482f97e0}在死线程上向处理程序发送消息

我认为这可能是由于声音结束时对后台线程的回调,或者是在完成前一个播放器之前重复使用媒体播放器.有任何想法吗?

解决方法 很老的问题,但是@Alex’ xkcd link还是说服我回答它.

我有一个非常相似的情况,并通过Runnable实例化MediaPlayer能够实现所需的结果.在我的例子中,IntentService调用正在进行的服务,该服务负责媒体播放.我的解决方案如下所示(仅限相关代码):

public class HelperService extends Service {    public voID play() {        Thread thread = new Thread(new Runnable() {            public voID run() {                soundStart();            }        });        thread.start();    }    private voID soundStart() {        try {            AssetfileDescriptor afd = mContext.getResources().openRawResourceFd(R.raw.sound);            mMediaPlayer = new MediaPlayer();            mMediaPlayer.setDataSource(afd.getfileDescriptor(),afd.getStartOffset(),afd.getLength());            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);            mMediaPlayer.setonErrorListener(new MediaPlayer.OnErrorListener() {                @OverrIDe                public boolean onError(MediaPlayer mp,int what,int extra) {                    mp.reset();                    return false;                }            });            mMediaPlayer.setonCompletionListener(new MediaPlayer.OnCompletionListener() {                @OverrIDe                public voID onCompletion(MediaPlayer mp) {                    // do stuff                }            });            mMediaPlayer.prepare();            mMediaPlayer.start();        } catch (IOException e) {            e.printstacktrace();        }    }}
总结

以上是内存溢出为你收集整理的Android媒体播放器导致“死线程”消息全部内容,希望文章能够帮你解决Android媒体播放器导致“死线程”消息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1128383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存