Java 如果每次使用不同的意图对象启动服务,会发生什么

Java 如果每次使用不同的意图对象启动服务,会发生什么,java,android,android-intent,service,android-mediaplayer,Java,Android,Android Intent,Service,Android Mediaplayer,堆栈溢出中有一个问题,它解决了如果创建一个新的intent对象并使用它多次调用同一服务时会发生什么情况。假设我们有一个媒体播放器的服务类 public class MyService extends Service { private MediaPlayer mp; @Override public void onCreate() { super.onCreate(); mp = new MediaPlayer();

堆栈溢出中有一个问题,它解决了如果创建一个新的intent对象并使用它多次调用同一服务时会发生什么情况。假设我们有一个媒体播放器的服务类

public class MyService extends Service
{
   private MediaPlayer mp;

    @Override
    public void onCreate()
    {
        super.onCreate();
        mp = new MediaPlayer();
        ....
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
     .....
     return  START_STICKY;
    }

    .....
}
所以如果我们要这么做

Intent i = new Intent(this, MyService.class);
startService(i);
它第一次调用onCreate方法,实例化Media Player对象,然后调用onStart命令方法

如果我们那时打电话

startService(i);
同样,它只需调用onStartCommand方法,而不是onCreate方法

问题:

但如果我们这样做了呢

Intent i2 = new Intent(this, MyService.class);
startService(i2);
然后它会调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个Media Player对象,然后调用onStartCommand方法,还是会意识到我们之前已经启动了服务,并且只调用onStartCommand

然后它会调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个MediaPlayer对象,然后调用onStartCommand方法吗

没有

它会意识到我们之前已经启动了服务,并且只调用onstart命令吗

Intent
对象是数据的载体。
Intent
对象本身的实例没有意义。
i
i2
都解析为
MyService
,最多会有一个
MyService
的运行实例

然后它会调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个MediaPlayer对象,然后调用onStartCommand方法吗

没有

它会意识到我们之前已经启动了服务,并且只调用onstart命令吗


Intent
对象是数据的载体。
Intent
对象本身的实例没有意义。
i
i2
都解析为
MyService
,最多会有一个
MyService
的运行实例,它将调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个Media Player对象,然后调用onStart命令方法。

它将调用onCreate方法,创建第二个Media Player对象,其中现在有两个Media Player对象,然后调用onStart命令方法。

问题: 然后它会调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个MediaPlayer对象,然后调用onStart命令方法吗?

不会的

Becoz服务在android中是单一实例,无论您启动它的目的是什么,只要您启动相同的服务,它总是会启动一次 然后它会调用onCreate方法,创建第二个MediaPlayer对象,其中现在有两个MediaPlayer对象,然后调用onStart命令方法吗?

不会的

Becoz服务在android中是单一实例,无论您启动它的目的是什么,只要您启动相同的服务,它总是只启动一次