我正在努力让服务在Android中运行。我的应用程序现在可以启动我的服务,但是当服务在后台运行并且我启动我的(主)活动时,服务将重新启动(将调用onCreate()
和onStartCommand()
命令。在我的MainActivity中,我通过以下代码检查服务是否已在运行:
if (isServiceRunning()){
System.out.println("De serice is running");
}
else{
System.out.println("De service is niet running");
startService(new Intent(this, YourService.class));
}
...
private boolean isServiceRunning() {
ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
Log.d("services", service.service.getClassName());
if ("com.vandervoorden.mijncijfers.YourService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
当我的服务正在运行时“De serice正在运行”会显示在我的控制台中。
为什么我自己没有重启服务时调用onCreate()
和onStartCommand()
?如何在服务启动时确保服务没有启动两次?
编辑1 2013-10-07 8:54 PM:
我的服务类:
public class YourService extends Service
{
Alarm alarm = new Alarm();
public void onCreate()
{
super.onCreate();
System.out.println("service: onCreate");
}
public int onStartCommand(Intent intent, int flags, int startId) {
//alarm.SetAlarm(this);
System.out.println("service: onStartCommand");
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
答案 0 :(得分:2)
这种行为看起来很奇怪,只要你确定你没有在活动的某个地方销毁你的服务,即使我通常做的是确保只运行我的服务的一个实例,使用静态标记服务本身跟踪“onCreate”和“onDestroy”的标志,如果活动想要启动我的服务,这种方式是独立的。我在服务本身有验证。
希望这有助于。
问候!