1

当我启动服务(IntentService)时,它会调用 onHandleIntent() 这是服务功能。在它运行时,如果我再次调用 startService(),它会缓存调用,并再次调用 onHandleIntent()。实际上我想要做的是,将一些新数据传递给当前正在运行的服务实例,而无需创建额外的。(就像线程或侦听器中的信令)。我该怎么做?在我的 onHandleIntent() 我想使用while(true){....},所以它会永远运行。

4

2 回答 2

1

扩展正常的服务类。在您收到的第一个 onStartCommand() 上,启动一个包含“while(true) {...}”代码的后台线程。在此后的 onStartCommand() 调用中,检查您的工作线程是否存在,当它存在时,发出信号。

在不知道您将使用此服务的目的的情况下,很难为您提供任何更好的建议。但是,需要考虑一些事情: - 查看 IntentService 也使用的 Looper/Handler 类。它们可能会为您提供一些很好的方法来编写“while(true)”循环,包括信号。- 请记住 onStartCommand() 方法应该在几秒钟内返回(它在主线程上运行)所以如果你想交出新工作(通过 onStartCommand 中传递的 Intent 接收)你应该确保这个手-关闭不需要太长时间。Looper/Handler 类也可以在这里为您提供帮助。

于 2013-02-04T15:26:52.790 回答
1

检查您的服务是否已经启动,如果没有启动它:

private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if ("com.example.Service".equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}
于 2015-09-15T12:01:07.733 回答