单身人士有多种用途?

时间:2018-09-06 01:56:59

标签: java android design-patterns singleton

我正在开发一个android应用程序,在其中可以/仅允许使用MediaPlayer的一个实例(Singleton实例)。

static MediaPlayer mp;
public static MediaPlayer getMediaPlayer() {
  if (mp == null) {
     mp = new MediaPlayer();
  }

  return mp;
}

现在可以出于两个目的调用此活动

  1. 在应用程序内(说ABC)
  2. 从任何其他应用程序(例如XYZ)进行预览

此Mediaplayer实例应播放视频或音频。 因此,我创建了一个处理请求的类(参数化构造函数以检查所需的音频实例或视频实例),并根据请求创建所需的实例。

但是,当“内部”应用程序用户正在播放音频文件并且用户启动了其他应用程序(XYZ)并请求播放视频时,就会出现问题。

现在,我正在存储MediaPlayer的先前状态(例如正在播放的文件和当前位置等),并释放MediaPlayer以用于视频播放的XYZ应用程序。一旦用户停止播放视频,ABC就会根据存储的实例恢复播放音频文件。

这是正确的方法吗?还是我需要修改此任务的体系结构?

请提出建议设计模式

2 个答案:

答案 0 :(得分:1)

在Android中使用单例进行状态持久化是要小心的事情。

Mabye,您应该调查活动生命周期,以了解在哪些情况下可以松开单例实例(以及其中存储的所有数据)。

Here is some information

例如,当您的应用在后台运行时,手机可以请求内存并杀死您的单例实例。

答案 1 :(得分:0)

这是我尝试使用的Singleton示例:

public class MediaPlayer{


        private static MediaPlayer instance = new MediaPlayer();

        public static MediaPlayer getInstance() {
                return MediaPlayer.instance;
        }

}

现在您有一个方案,您可以基于getInstance()方法创建对象,该方法只能引用同一对象,这将确保您的单例模式。我对其进行了测试,并尝试通过这种单例模式制作对象:

MediaPlayer t1 = MediaPlayer.getInstance();
MediaPlayer t2 = MediaPlayer.getInstance();
System.out.println(t1.equals(t2));

结果:

true