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