Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 启动活动时重新启动服务_Android_Android Service - Fatal编程技术网

Android 启动活动时重新启动服务

Android 启动活动时重新启动服务,android,android-service,Android,Android Service,我正在尝试让服务在Android中工作。我的应用程序现在可以启动我的服务,但当服务在后台运行并且我启动(主)活动时,服务将重新启动(将调用onCreate()和onStartCommand()命令)。在我的MainActivity中,我通过以下代码检查服务是否已在运行: if (isServiceRunning()){ System.out.println("De serice is running"); } else{ System.ou

我正在尝试让服务在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 is running”将显示在我的控制台中

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

编辑1 2013-10-07晚上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;
    }
}

只有当您确定没有在活动中的某个位置销毁服务时,此行为才会显得奇怪,即使如此,我通常所做的是确保只有一个服务实例正在运行,即使用跟踪“onCreate”和“onDestroy”的静态标志来标记服务本身,这样,如果活动想要启动我的服务,我将在服务本身中进行验证

希望这有帮助

问候