0

Android アプリケーションである mp3 プレーヤーを完成させましたが、正しいかどうかわからない問題がいくつかあります。

もっと簡単にするために、主な問題について話します。

私には2つの活動があります(プログラム(メインアクト)とエフェクト(イコライザー、バスブースター用))。

音楽を再生するためのServicePlayerという名前のサービスがあります(Mediaplayerを使用)

さて、アプリを起動します。

  1. プログラム アクティビティが開始されます。このアクティビティでは、サービスを開始し、それをバインドして音楽を制御します。

  2. エフェクト アクティビティを起動します (プログラム アクトのボタンを押すだけです)。このアクティビティでは、以前に作成したサービスにバインドしません。私はただ使用します:

    ServicePlayer mSer = new ServicePlayer();* 注: ServicePlayer クラスにコンストラクターを定義せず、デフォルトのコンストラクターを使用するだけです (そのため、新しい servicelayer オブジェクトの作成時に初期化される変数はありません)。

それから私は使用します:

mSer.stop()// method to stop music in serviceplayer ( just call mediaplayer object to stop)

私はさまよっています:

  1. 効果アクティビティがバインドされていないときに、上記の方法が機能するのはなぜですか?.

  2. コード行 (*) は、serviceplayer の新しいオブジェクトを作成しますか? はいの場合、音楽を再生できる serviceplayer オブジェクトが 2 つありますか? いいえの場合、最初に作成された serviceplayer のオブジェクトは 1 つだけで、次のコールバックでは、新しいサービスは作成されず、以前に作成されたサービスを使用するだけですか?

  3. バインドせずに serviceplayer クラスのデータにアクセスするにはどうすればよいですか? 実際、私はそれを行うことができますが、初期化された serviceplayer の変数がないため、理由がわかりません (上記の行 (*) を参照してください。

どうもありがとう。

UPDATE ANSWER、助けてくれたSnicolasに感謝します:

  1. メソッド stop() は、静的オブジェクトのメディアプレーヤーを停止するためです。(注: 静的メンバー)。静的メンバーでない場合は、NullPointerException が返されます。

  2. はい、新しいオブジェクトを作成しますが、新しいサービスは作成しません。1 つまたは 1 つのサービス (もちろん、同じサービス) のみを起動できます。サービスが開始されると、次の startService または bindService メソッドのコールバックは新しいサービスを作成しません。古いサービスを使用するだけです。

  3. プリミティブ変数、String、enum 型でも正常にアクセスできますが、それは以前に起動したサービスからのデータではなく、作成した新しいオブジェクトからのデータです。オブジェクト型の場合、コンストラクタで初期化しないと NullPointerException が発生します。ただし、静的メンバー データにはアクセスできます。

それが私が今理解していることなので、もちろん、それは間違っているか、十分ではない可能性があります. 寄稿できる方はお願いします。

4

1 に答える 1

1

ここにいくつかの答えがあります:

  1. メディア プレーヤーが静的な場合は、ServicePlayer のすべてのインスタンスで共有されます。しかし、より理解するためにポイント2を読んでください。
  2. new を使用すると、サービスを作成するだけですが、それは単純な Java オブジェクトであり、用語の Android の意味でのサービスではありません: システムによって開始されず、システムによって管理されるライフサイクルがなく、バインドできません、適切に開始および停止できません。しかし、Android にも例外はありません。各 new は新しいオブジェクトを作成します。そのため、プログラム アクティビティによって適切に開始されたサービスの 1 つのインスタンスと、POJO のようにインスタンス化された 2 つ目のインスタンスが存在します。
  3. 理解できない。2 番目のアクティビティからもサービスにバインドするだけです。
于 2013-01-01T16:52:08.537 に答える