StartService的doco
我发现对StartService的每个调用似乎都在启动该服务的一个单独实例,因为服务正在做的工作(在我的测试用例中,非常琐碎地写入一个新的日志文件)正在为每个调用再次完成。
我正在尝试通过ActivityManager循环检测服务…GetRunningServices(integer.max_value)),但未显示。
SGS 11上的Android 2.3.3
我这里有些东西不见了。我知道服务的onCreate()方法只有在创建时才会被调用,而且由于我在服务中有一个连续的进程在运行(在
在我的活动的onresume方法中,我用以下方式启动服务(“my service”):
Intent intent = new Intent(this, myService.class);
startService(intent);
在我的服务中,我有一个
@Override
public void onCreate(){
super.onCreate();
...
在这里,我使用timertask设置了一个计时器,它每秒写入一次日志文件。
这按预期工作-我可以看到正在写入的日志。
在活动的onResume方法中,在调用StartService方法之前,我将通过调用包含
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (service.service.getClassName().contentEquals("com.gpsanimator.startrax.myService")) {
Toast.makeText(getApplicationContext(), "Service IS SO running: ", Toast.LENGTH_SHORT).show();
return true;
}
这永远找不到myservice服务,即使它看起来是在运行,因为它很乐意写入日志文件。
e每次我恢复活动时,都会调用我的myService服务的onCreate方法-它会生成一个新的日志文件并开始向其写入,以及不断更新原始日志文件。
是否在第一次调用StartService时启动服务?然后继续跑步?对startService()的后续调用是否应查找已运行的服务,从而不再触发onCreate()方法?但这不是我看到的。似乎每次调用StartService()都会触发服务的onCreate()方法。
显然比这复杂得多,我想深入了解一下。
最佳答案
这完全取决于您将代码放入的方法。
当您调用StartService时,在给定的时间只创建一个服务。如果服务已经存在,它将被重用。因此,只有当服务不存在时,才会调用onCreate()中的代码。
但是,每次调用StartService时,onStartCommand()中的代码都将运行,不管发生什么。
因此,是的,在给定的时间内,只有一个服务实例存在,但是调用StartService可能会产生效果。