【问题标题】:What happens if you start a service with a different Intent object each time如果您每次都使用不同的 Intent 对象启动服务会发生什么
【发布时间】:2016-06-27 17:12:59
【问题描述】:

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

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 方法,实例化我们的媒体播放器对象,然后调用我们的 onStartCommand 方法。

如果我们再调用

startService(i);

同样,它只是调用 onStartCommand 方法而不是 onCreate 方法。

问题:

如果我们这样做了会怎样

Intent i2 = new Intent(this, MyService.class);
startService(i2);

然后它会调用 onCreate 方法,创建第二个 MediaPlayer 对象,其中现在我们有 2 个媒体播放器对象,然后调用 onStartCommand 方法,还是它会意识到我们之前已经启动了服务并且只会调用 onStartCommand ?

【问题讨论】:

    标签: java android android-intent service android-mediaplayer


    【解决方案1】:

    然后它会调用 onCreate 方法,创建第二个 MediaPlayer 对象,其中现在我们有 2 个媒体播放器对象,然后调用 onStartCommand 方法

    没有。

    会不会意识到我们之前已经启动了服务,只会调用onStartCommand?

    是的。

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

    【讨论】:

      【解决方案2】:

      问题: 然后它会调用 onCreate 方法,创建第二个 MediaPlayer 对象,其中现在我们有 2 个媒体播放器对象,然后调用 onStartCommand 方法吗?

      不会的

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

      【讨论】:

        【解决方案3】:

        它将调用 onCreate 方法,创建第二个 MediaPlayer 对象,其中现在我们有 2 个媒体播放器对象,然后调用 onStartCommand 方法。

        【讨论】:

          猜你喜欢
          • 2016-02-20
          • 2017-09-22
          • 1970-01-01
          • 1970-01-01
          • 2021-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-15
          相关资源
          最近更新 更多