如何在不启动新实例的情况下将数据从Activity传递到Service?

时间:2013-03-27 16:14:34

标签: android

使用intent,extras等使用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(在网上建议),但它似乎没有用

谢谢!

3 个答案:

答案 0 :(得分:2)

  

每次我担心它可能会产生多个玩家时使用startService

没有。您的服务将恰好为零或一个实例。如果服务已经启动,startService()不会启动第二个实例,而只是调用现有实例的onStartCommand()

  

最终我得到一个ANR

堆栈跟踪应指出困难的来源。

答案 1 :(得分:1)

绑定到您的服务并通过Messenger发送您的消息。

答案 2 :(得分: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)

如此简单而又令人头疼的事情要找到它!