6

MediaPlayerをオンデマンドで再生するためにIntentServiceを使用することは妥当ですか? developer's guideによれば、IntentServiceは、実際に作業している間だけ持続します。私は再びトラックを再生したいときMediaPlayer毎回再初期化の結果のオーバーヘッドを考慮すると、それは悪いアイデアのようです...MediaPlayerの再生にIntentServiceを使用する

だから私の質問は次のとおりです。Serviceのこの種を使用して、実際の結果のオーバーヘッドはどのくらいです。それはシステム/アプリケーションのパフォーマンスに知覚可能な影響を与えますか?専用のワーカースレッドを使用してServiceという独自の実装を使用する必要がありますか?

答えて

11

オンデマンドで背景MediaPlayerの再生にIntentServiceを使用することは妥当ですか?

本当にこの方法でトラックを変更することはできません。さらに、トラックがいつ完了するかを知る必要があります。そうしないと、メモリがリークしている場合を除きます。最後に、Androidがあなたのプロセスを終了させることを意味します。onHandleIntent()が終了した後はおそらくミリ秒で、無駄な音楽プレーヤーになります。

専用のワーカースレッドで独自のサービス実装を使用する必要がありますか?

MediaPlayerの多くはすでに非同期であるため、スレッドは必要ありません。ネットワークI/OやディスクI/Oなどを自分で実行する場合にのみ、独自のスレッドを作成することができます。しかし、Service(そしておそらく前景のService)を持つことは、音楽プレーヤーの典型的なアプローチです。

+1

これによると:[記事](http://developer.android.com/reference/android/media/MediaPlayer.html) 'start()'は非同期ではありません。この呼び出し元のスレッドをブロックしないでしょうか? – wodzu

+1

@Paweł:図が正しくありません。 'start()'は非同期です。 – CommonsWare

+0

@CommonsWareサービスが再生されている間に何度も何度も何度も何度も何度も再生する必要があることを意味します。 私はメディアプレーヤーのコントロールを必要としません。私は一時停止や検索をする必要はありません。 これは、onHandleIntentを処理できます。 しかし、サービスでは、これらのインテントをonStartCommandで手動で処理する必要があります。 –

関連する問題