【问题标题】:How Do I Restart A Service? [duplicate]如何重启服务? [复制]
【发布时间】:2018-08-22 22:18:46
【问题描述】:

我有一项服务,我想在用户点击特定按钮时停止并重新启动,我有:

    stopService(new Intent(getBaseContext(), TimerService.class));
    startService(new Intent(getBaseContext(), TimerService.class));

但是,我的印象是每次点击按钮时实际上都会创建多个服务。如何在不创建重复项的情况下启动和停止相同的服务?

编辑:不幸的是,建议的项目对我不起作用。不幸的是,在尝试实施给定的答案时,它并没有改变任何东西。我的初始计时器记录了它的滴答声,不幸的是,第二个计时器仍在发生滴答声,它嵌套在 onFinish 函数中仍未发生。所以不能停止服务。

【问题讨论】:

  • 服务或线程中是否有处理程序?如果是,您应该通过覆盖方法 onDestroy 来停止它们,例如,对于处理程序,您应该调用 handler.removecallbacksandmessages(null) ,因此如果您不删除或销毁它们,所有处理程序都将被删除,它们将保持活动状态。如果这不是您的情况,请分享服务实现
  • startService 如果它已经在运行,请不要创建另一个服务实例,但是如果您想完全重启,请考虑在您的 onDestroy 中销毁/释放任何资源/计时器等并调用stopService其次是startService
  • 聪明的思维卡西姆。会试试的。

标签: java android android-service


【解决方案1】:

我相信您的问题可能在于使用getBaseContext()check out this answer。我在将基本上下文与服务一起使用时遇到了问题。另外,检查您的意图,您正在使用停止服务器创建新的意图,而不是使用参考服务来停止它。 Check out this answer as well.

试试:

    Intent i = new Intent(getApplicationContext(), TimerService.class);
    stopService(i);

【讨论】:

  • 不幸的是,这不起作用。我的日志显示嵌套计时器在第一个计时器完成之前仍在关闭,它应该在第二个计时器开始之前完成。
  • 嗯,你试过所有的上下文变体了吗?
  • 查看更新的答案
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 2015-04-10
  • 2018-04-04
  • 2012-05-30
  • 1970-01-01
  • 2021-06-04
  • 2016-04-29
  • 2016-07-02
相关资源
最近更新 更多