2014-04-01 1 views
0

서비스 A에 대해 서비스 B에 대해 통보해야 할 필요가 있습니다. 서비스 ~ 서비스 Athis question에 명시된대로 서비스를 시작하지 않아야하는 다음 방법을 호출하여 바인딩합니다.실행중인 서비스와 바운드 서비스를 구별하는 방법은 무엇입니까?

serviceA.bindService(new Intent(serviceA, ServiceB.class), conn, 0); 

그러나 서비스가 실행 중인지 확인하고 싶을 때 다음 방법을 사용하면 서비스가 방금 바인딩되어 있어도 true를 반환합니다.

public static boolean isServiceRunning(Context context) { 
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (ServiceB.class.getName().equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

왜 서비스에 대한 진정한 isServiceRunning 복귀 단지 바운드 (내가 그 서비스가 설정에서 응용 프로그램을 실행에보고 실행되고 있지 확인) 실행되지 않습니다?

+0

'ServiceB # onCreate'가 호출되었는지 확인할 수 있습니까? – kiruwka

+0

'ServiceB # onCreate'가 호출되지 않았습니다. – jellyfication

+0

잘,'ServiceB'보다는 당신이 기대하는 만들지 않습니다. 나는'isServiceRunning' 메소드 코드가 그것을 잘못 체크하고있는 것 같아요. – kiruwka

답변

0

서비스를 바인딩 할 때 시스템에서 서비스를 시작하면 bindservice()이 실제로 서비스를 시작합니다.

바운드 서비스는 다른 응용 프로그램이 바인딩되어 상호 작용할 수 있도록 허용하는 Service 클래스의 구현입니다. 서비스 바인딩을 제공하려면 onBind() 콜백 메소드를 구현해야합니다. 이 메서드는 클라이언트가 서비스와 상호 작용하는 데 사용할 수있는 프로그래밍 인터페이스를 정의하는 IBinder 개체를 반환합니다.

자세한 내용은 Android document을 확인하십시오.

관련 문제