2013-10-07 55 views
1

我正在尝试在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; 
} 

当我的服务正在运行的“德的贡献莫过于正在运行”显示在我的控制台。

为什么在调用onCreate()onStartCommand()时我自己没有重新启动服务?如何确保服务在启动时不会启动两次?

编辑1 2013年10月7日下午8点54分:

我的服务类:

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; 
    } 
} 

回答

2

这种行为看起来只有当你确定你是不是在什么地方破坏你的服务怪异即使如此,我通常会做的以确保只有一个服务实例正在运行,正在使用一个静态标志来标记服务本身,该标志将跟踪“onCreate”和“onDestroy”,如果该活动会独立喜欢开始我的服务我有服务本身的验证。

希望这有助于。

问候!