【问题标题】:Sticky Service restarts after Application close应用程序关闭后粘性服务重新启动
【发布时间】:2013-11-19 14:00:27
【问题描述】:

我的 STICKY 服务有问题。我在 MainActivity.class 中调用它并绑定它:

MainActivity:

Intent intent = new Intent(this, MyService.class);
ComponentName MyCompName= startService(intent);
bindService(intent, MyConnection, Context.BIND_AUTO_CREATE);

还有……

我的服务

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    return START_STICKY;
}

我希望此服务运行 STICKY 并且永远不会关闭或重新启动。但是当我关闭我的应用程序时,会调用 MyService 的 onCreate()-Method 并重置所有变量,我不知道为什么。

顺便说一句:我不叫 stopService!

【问题讨论】:

标签: android android-service sticky


【解决方案1】:

STICKY 和 NON_STICKY 服务的区别在于,STICKY 服务被杀死后会重启。我认为不可能保证您的服务永远不会重新启动 - 如果内存不足,它可能会重新启动。

如果需要保存状态,可以将变量保存在数据库中。要查看服务是首次创建还是重启,可以检查 onStartCommand 中的 Intent 是否为空。

如果你只需要保留服务创建时的初始状态,你可以使用START_REDELIVER_INTENT,它会在onStartCommand中重新发送用于创建服务的Intent。

【讨论】:

  • 但是我什么时候应该将服务的当前状态保存在数据库中,因为 MyService 的 onDestroy()-Method 永远不会被调用?
  • 如果状态数据变化不是太频繁,你可以随时保存。
  • 好的,但是我从数据库中重新加载状态时遇到了麻烦。因为当我在 onStartCommand 中检查意图是否为空时,然后我调用 LoadState()(它从 db 加载数据),无法加载状态,因为此时数据库不可用。数据库的绑定需要更多时间
  • 好的,最后我在连接数据库而不是 onStartCommand 时这样做。
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多