我正在使用MediaPlayer类在我正在处理的应用程序.我想在我的活动的一生中保持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(); }
在初始化我正在做的事情:
MediaPlayer player = new MediaPlayer(); player.reset(); player.setAudioStreamType(AudioManager.STREAM_MUSIC); AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId); setDataSource(player,assetFileDescriptor);
当我想演奏我做的曲目:
player.prepare(); player.start();
欣赏任何意见,
谢谢,
解决方法
我不完全确定该消息的起源,但请注意,您正在创建两个MediaPlayers:一个在onCreate中,一个在onResume中.
这个消息似乎表明它不喜欢MP被定稿(GC’d)而不被“释放”.它可能是指您在onCreate中创建的第一个mediaPlayer,在您在onResume中重新分配后丢失.
也许错误会消失,如果你只创建一个MediaPlayer而不是两个?