2

MediaPlayer (Singleton インスタンス) のインスタンスを 1 つだけ使用できる/許可する Android アプリケーションを開発しています。

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

  return mp;
}

現在、このアクティビティは 2 つの目的で呼び出すことができます

  1. アプリケーション内から (ABC と言う)
  2. プレビュー用の他のアプリケーション (XYZ など) から

この mediaplayer のインスタンスは、ビデオまたはオーディオのいずれかを再生することになっています。そのため、リクエストを処理するクラス(必要なオーディオインスタンスまたは必要なビデオインスタンスをチェックするためのパラメーター化されたコンストラクター)を作成し、リクエストに基づいて必要なインスタンスを作成します。

ただし、アプリケーション内でユーザーがオーディオ ファイルを再生しているときに、ユーザーが他のアプリケーション (XYZ) を起動してビデオの再生を要求した場合に問題が発生します。

現在、MediaPlayer の以前の状態 (再生中のファイルや現在の位置など) を保存し、MediaPlayer をリリースして、ビデオ再生用の XYZ アプリケーションに使用します。ユーザーがビデオの再生を停止すると、ABC は保存されたインスタンスに基づいてオーディオ ファイルの再生を再開します。

それで、これは正しいアプローチですか?または、このタスクのアーキテクチャを変更する必要がありますか?

wrtのデザインパターンを提案してください

4

2 に答える 2

0

これが私が試すシングルトンの例です:

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
于 2018-09-06T03:36:19.510 に答える