我正在开发一个android应用程序,在其中可以/仅允许使用MediaPlayer的一个实例(Singleton实例)。
static MediaPlayer mp;
public static MediaPlayer getMediaPlayer() {
if (mp == null) {
mp = new MediaPlayer();
}
return mp;
}
现在可以出于两个目的调用此活动
此Mediaplayer实例应播放视频或音频。 因此,我创建了一个处理请求的类(参数化构造函数以检查所需的音频实例或视频实例),并根据请求创建所需的实例。
但是,当“内部”应用程序用户正在播放音频文件并且用户启动了其他应用程序(XYZ)并请求播放视频时,就会出现问题。
现在,我正在存储MediaPlayer的先前状态(例如正在播放的文件和当前位置等),并释放MediaPlayer以用于视频播放的XYZ应用程序。一旦用户停止播放视频,ABC就会根据存储的实例恢复播放音频文件。
这是正确的方法吗?还是我需要修改此任务的体系结构?
请提出建议设计模式
答案 0 :(得分:1)
在Android中使用单例进行状态持久化是要小心的事情。
Mabye,您应该调查活动生命周期,以了解在哪些情况下可以松开单例实例(以及其中存储的所有数据)。
例如,当您的应用在后台运行时,手机可以请求内存并杀死您的单例实例。
答案 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