Android:MediaPlayer 未发布就完成了
Posted
技术标签:
【中文标题】Android:MediaPlayer 未发布就完成了【英文标题】:Android: MediaPlayer finalized without being released 【发布时间】:2012-09-17 09:53:46 【问题描述】:我在当前正在开发的应用程序中使用 MediaPlayer 类。我想在 Activity 的整个生命周期中保留 MediaPlayer 类的一个实例。我在活动的 onPause() 方法中从 MediaPlayer 类释放资源,但是当活动开始时,我看到 LogCat 窗口中弹出以下警告:
W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released
知道我在这里做错了什么或如何删除此警告吗?它似乎没有引起任何问题,声音也很好。
我有太多代码要发布,因为我包装了一些对象以允许管理状态(MediaPlayer 类目前不提供状态信息),以及其他各种原因,但代码差不多:
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
initialiseSounds(this);
@Override
protected void onPause()
soundManager.releaseResources();
@Override
protected void onResume()
initialiseSounds(this);
在我的 SoundManager 类中使用此方法:
public void releaseResources()
player.release();
在 initialiseSounds 我正在做的事情:
MediaPlayer player = new MediaPlayer();
player.reset();
player.setAudiostreamType(AudioManager.STREAM_MUSIC);
AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId);
setDataSource(player, assetFileDescriptor);
当我想播放曲目时:
player.prepare();
player.start();
感谢任何建议,
谢谢,
【问题讨论】:
您能否在 onCreate/onResume/onPause 等中包含您对媒体播放器所做的相关代码 sn-ps? “释放资源”的解释可能有些含糊。 @Tim Hi Tim,我已经在问题中添加了一些代码,谢谢! 这个答案救了我***.com/a/59234021/5773037 【参考方案1】:我不完全确定该消息的来源,但请注意,您正在创建 两个 MediaPlayer:一个在 onCreate 中,一个在 onResume 中。
该消息似乎表明它不喜欢 MP 在没有被“释放”的情况下被最终确定(GC'd)。它可能指的是您在 onCreate 中创建的第一个 mediaPlayer,在您在 onResume 中重新分配后丢失。
如果您只创建一个而不是两个 MediaPlayer,错误可能会消失?
【讨论】:
【参考方案2】:如果您不对媒体播放器对象调用 release 并且您的片段被停止并销毁,也会出现此消息。
您需要覆盖 onStop()
或其他方法之一,并在媒体播放器上调用 release()。
@Override
public void onStop()
super.onStop();
mediaPlayer.stop();
mediaPlayer.release();
【讨论】:
【参考方案3】:就我而言,我在一个方法中创建了本地媒体播放器引用,而我所做的是,当我想播放一些音频时,我一直使用该方法。但后来我发现,突然间,该局部变量将从内存中清除,并且无法再使用该引用访问 MediaPlayer。
然后我创建了一个全局静态 Mediaplayer 引用,当我创建一个媒体播放器对象时,我将它初始化为该静态变量,我的问题似乎得到了解决
【讨论】:
我的荣幸! tnx 投票给兄弟...@NikunjParadva 我一直很感激那个对我有帮助的答案。 谢谢先生!这正是问题所在! 我的快乐伙伴...叫我 Lasitha。【参考方案4】:我也遇到过类似的问题 调用 onStart() 或 onResume 中的方法,不要在 onCreate() 中调用。
【讨论】:
以上是关于Android:MediaPlayer 未发布就完成了的主要内容,如果未能解决你的问题,请参考以下文章