如何防止对o​​nHandleIntent()的多次调用 - IntentService

时间:2013-02-04 13:59:25

标签: android android-service intentservice

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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;
}