Android中的媒体播放器内存管理?

Android中的媒体播放器内存管理?,android,performance,memory-management,media-player,Android,Performance,Memory Management,Media Player,我是Android的新手。 我在理解android中的MediaPlayer内存管理方面有问题。 我正在全局声明所有MediaPlayer对象并在onCreate()中创建它&需要时启动它并在完成后立即释放。需要时我会再次创建它们。这是个好办法吗? 我应该在需要的方法中创建它们,还是在onCreate中创建它们? 但如果我在onCreate()中创建它们,就无法释放它们。 是否有其他方法释放MediaPlayer的()函数以释放垃圾内存 MediaPlayer mp,mp1,mp2......m

我是Android的新手。 我在理解android中的MediaPlayer内存管理方面有问题。 我正在全局声明所有MediaPlayer对象并在onCreate()中创建它&需要时启动它并在完成后立即释放。需要时我会再次创建它们。这是个好办法吗? 我应该在需要的方法中创建它们,还是在onCreate中创建它们? 但如果我在onCreate()中创建它们,就无法释放它们。 是否有其他方法释放MediaPlayer的()函数以释放垃圾内存

MediaPlayer mp,mp1,mp2......mpn;
@override
protected void onCreate(){
mp = MediaPlayer.create(getApplicationContext() , R.raw.sound);
//same for all objects.creating here will require more memory ? 
}
现在,方法

private void method(){
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp.release();
            mp= null;
        }
    });
}
//same for all objects when i need them.

我应该在哪里声明、创建和初始化它们以实现良好的内存管理,因为我使用了大量的MediaPlayer对象。

内存不是这里的问题。您的MediaPlayer是一个小的代理对象,您可以保留它,也可以删除它,这并不重要。重要的是,您应该尽快调用release(),因为否则真正的播放器(低级服务)可能会继续保存编解码器实例和内部缓冲区,在某些设备上甚至可能会保持不必要的硬件通电。

重复使用相同的功能。您可以通过调用
mp.reset()
重置mediaplayer。重置()是否会像释放()一样释放内存?将MediaPlayer重置为未初始化状态。调用此方法后,必须通过设置数据源并调用prepare()再次初始化它。对于发布检查文档,您可以检查此链接。如果有帮助的话
onCreate
在生命周期中被调用一次,除非activtiy被销毁并重新创建。使用reset()是否有任何好处或损失?要播放下一首歌曲,op必须再次创建MeadPlayer对象。使用reset()是否有任何好处或损失?您不会每次都创建一个新的媒体播放器对象,您将恢复相同的媒体播放器对象。当您使用完mediaplayer后,您可以在活动的
onPause
onStop
中释放相同的内容。如果您想开始播放新文件,并且正在使用最新的API(16+),则可以改为使用setNextMediaPlayer。如果您不打算立即开始新的播放,我认为reset()没有多大用处-您可以随时在需要时创建播放器的新实例it@Raghunandan使用reset()后,如何使用原始文件夹中的声音?