【问题标题】:Android: How to Stop service that is started by bindService() with BIND_AUTO_CREATE option?Android:如何使用 BIND_AUTO_CREATE 选项停止由 bindService() 启动的服务?
【发布时间】:2010-11-18 16:25:35
【问题描述】:

我通过以下方式启动服务:

private ServiceConnection _serviceConnection = new ServiceConnection() {...}
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

我想“重启”服务。 (让我们不要争论我为什么要这样做) 我这样做是:

unbindService(_serviceConnection);
// Do some initialization on service
bindService(new Intent(this, MainService.class), _serviceConnection, Context.BIND_AUTO_CREATE);

我注意到服务不会死(onDestroy 不会运行),直到我调用下一个 bindService(); 所以我在服务上做的一些静态初始化被 onDestroy() 实现清除了。

问题:如何确保 unbindService() 将停止服务(运行 onDestory()), 这样我就可以在之后进行初始化并重新运行 bindService()?

【问题讨论】:

    标签: android service bind


    【解决方案1】:

    Android 可以自行决定保留服务,即使在调用unbindServicestopService 之后也是如此。

    如果您需要立即在服务端重新初始化某些数据,您很可能需要为此提供服务方法。

    【讨论】:

      【解决方案2】:

      问题:如何确保 unbindService() 将停止服务(运行 onDestory()),以便我可以在之后进行初始化并重新运行 bindService()?

      onDestroy() 在最后一个unbindService() 之后的时间是不确定的,而且肯定是异步的。你也可以尝试自己调用stopService(),但这也是异步的,所以你不知道什么时候会停止。

      我不知道您使用绑定模式“重新启动”服务的可靠方法。

      【讨论】:

        【解决方案3】:

        如果在 onUnbind() 中返回 true,则可以使用 onRebind()。

        请看这里: http://developer.android.com/guide/components/bound-services.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-20
          • 1970-01-01
          • 1970-01-01
          • 2011-10-16
          • 2011-11-16
          • 1970-01-01
          相关资源
          最近更新 更多