1

インテント、エクストラなどを使用し、startService(intent) を使用してサービスにデータを渡すことに問題はありません

Intent intent = new Intent();
intent.setClass(MainActivity.this, MediaPlayerService.class);
intent.setAction(MediaPlayerService.PLAY_PAUSE);

intent.putExtra("URI", URI);
intent.putExtra("TITLE", content.toString());
//PendingIntent.getService(MainActivity.this, 0, intent, 0);
startService(intent);

問題は、サービスが MediaPlayer を使用して音楽を再生するバックグラウンド サービスであることです。毎回 startService を使用すると、複数のプレイヤーが生成されるのではないかと心配になり、最終的には ANR が発生します (すべてがスムーズに機能している場合でも)

必要なのは、MusicPlayerService に新しいトラックを再生するように指示することだけです。何か案は?コードからわかるように、PendingIntent (ネット上で推奨) も試しましたが、うまくいかなかったようです

ありがとう!

4

3 に答える 3

2

毎回 startService を使用すると、複数のプレイヤーが生成されるのではないかと心配しています

いいえ。サービスのインスタンスは正確にゼロまたは 1 つです。サービスがすでに開始されている場合startService()、2 番目のインスタンスは開始されず、単にonStartCommand()既存のインスタンスが呼び出されます。

そして最終的にANRを取得します

スタック トレースは、問題の原因を指摘する必要があります。

于 2013-03-27T16:18:37.567 に答える
1

サービスにバインドし、Messenger 経由でメッセージを送信します。

于 2013-03-27T16:29:38.557 に答える
0

解決しました!私はチェックし、もしそうなら

public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        Log.d(TAG,"super called "+startId);
...

startId が常に増加し、最終的にタイムアウトが発生することがわかりました。電話することで解決

stopService(intent)
...
startService(intent)

とてもシンプルですが、それを見つけるのに非常に多くの頭痛の種があります!

于 2013-03-27T16:53:16.120 に答える