mag*_*tte 16 android android-mediaplayer
我正在使用我正在处理的应用程序中的MediaPlayer类.我希望在我的Activity的生命周期中保留一个MediaPlayer类的实例.我正在活动的onPause(){}方法中释放MediaPlayer类中的资源,但是当活动开始时,我会在LogCat窗口中弹出以下警告:
W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么或如何删除此警告?它似乎没有引起任何问题,声音效果很好.
我有一些太多的代码要发布,因为我包装了一些对象以允许管理状态(MediaPlayer类当前不提供状态信息),以及其他各种原因,但代码非常多:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initialiseSounds(this);
}
@Override
protected void onPause()
{
soundManager.releaseResources();
}
@Override
protected void onResume()
{
initialiseSounds(this);
}
Run Code Online (Sandbox Code Playgroud)
在我的SoundManager类中使用此方法:
public void releaseResources()
{
player.release();
}
Run Code Online (Sandbox Code Playgroud)
在初始化声音我正在做:
MediaPlayer player = new MediaPlayer();
player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId);
setDataSource(player, assetFileDescriptor);
Run Code Online (Sandbox Code Playgroud)
当我想播放曲目时,我会:
player.prepare();
player.start();
Run Code Online (Sandbox Code Playgroud)
感谢任何建议,
谢谢,
Tim*_*Tim 20
我不完全确定该消息的来源,但请注意,您正在创建两个 MediaPlayers:一个在onCreate中,另一个在onResume中.
该消息似乎表明它不喜欢MP正在最终确定(GC'd)而不被'释放'.它可能指的是您在onCreate中创建的第一个mediaPlayer,它在onResume中重新分配后丢失.
如果你只创建一个MediaPlayer而不是两个,那么错误可能会消失?
Las*_*mal 11
就我而言,我在一个方法中创建了本地媒体播放器引用,我所做的是,当我想播放一些音频时,我一直使用该方法。但后来我发现突然间该局部变量将从内存中清除,并且无法再通过该引用访问 MediaPlayer 。
然后我创建了一个全局静态 Mediaplayer 引用,当我创建一个媒体播放器对象时,我将其初始化为该静态变量,我的问题似乎得到了解决
如果您不在媒体播放器对象上调用 release 并且您的片段被停止并销毁,也会出现此消息。
您需要覆盖onStop()或其他方法之一并在媒体播放器上调用 release() 。
@Override
public void onStop() {
super.onStop();
mediaPlayer.stop();
mediaPlayer.release();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22225 次 |
| 最近记录: |