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 我担心它可能会产生多个玩家

不会。您的服务将恰好有零个或一个实例。如果服务已经启动,startService()则不会启动第二个实例,而只是调用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 回答