2016-08-08 4 views
2

모듈 A에서 구현 된 서비스가 있습니다. 이제 앱 B와 C는이 라이브러리를 사용하여 bindService(service, connection, BIND_AUTO_CREATE)을 사용하여 서비스와 바인딩하지만 항상 Service의 새 인스턴스를 만듭니다. Messenger을 사용하여 바인더를 연결 개체에 반환합니다. AIDL을 사용하면 같은 서비스 인스턴스를 공유하는 방법이 어떻게됩니까? 나는이 질문과 관련된 거의 모든 stackoverflow 응답을 읽고 시도했다. 그러나 여전히 나는 위에서 설명한 것을 성취 할 수 없다.여러 앱에서 안드로이드가 기존 서비스와 바인딩합니다.

이 서비스의 매니페스트는 프로세스 속성에 대한 전체 프로세스 이름이있는 모듈 A에 정의되어 있으며 내 보낸 태그는 true로 설정됩니다.

<service 
     android:name="io.packagename.LocationService" 
     android:enabled="true" 
     android:exported="true" 
     android:permission="android.permission.ACCESS_FINE_LOCATION" 
     android:process="io.packagename.locationService" /> 

LocationService 클래스 : 어떤 도움이 많이 감사합니다

class LocationService extends Service { 
     IncomingHandler handler = new IncomingHandler() 
     Messenger messenger = new Messenger(handler) 

     public IBinder onBind(Intent intent) { 
      Log.d(TAG, "onBind") 
      return messenger.binder 
     } 
     } 

.

+0

서비스 클래스 – Lino

+0

@Lino를 게시하십시오. 코드가 많지 않지만 어쨌든 추가했습니다. 감사합니다 –

+0

감사합니다. 더 많은 서비스 인스턴스가 생성되었는지 확인하는 방법은 무엇입니까? – Lino

답변

0

docs을 인용 : 서비스 문서에서 설명하고있는 바와 같이

, 당신은 모두 시작하고 바인딩 된 서비스를 만들 수 있습니다. 즉, 서비스는 startService()를 호출하여 시작될 수 있습니다.이 서비스는 서비스가 무기한 실행되도록 허용하고 이며 클라이언트는 bindService()를 호출하여 서비스에 바인딩 할 수 있습니다.

예 :

예를 들어, 음악 플레이어가 유용의 서비스 무기한 실행하고 또한 바인딩을 제공 할 수 있도록 찾을 수 있습니다. 이 방법을 통해 활동은 일부 음악을 재생하는 서비스를 시작할 수 있으며 사용자가 응용 프로그램을 나가더라도 음악은 계속 재생됩니다 ( ). 그런 다음 사용자가 을 응용 프로그램에 반환하면 해당 활동이 서비스에 바인딩되어 재생 제어권을 다시 얻을 수 있습니다.

저는 귀하의 사례에 해당한다고 믿기 때문에 서비스를 시작하고 필요에 따라 클라이언트를 바인딩 할 수 있습니다.

+0

에서 서비스 인스턴스를 찾을 수 있습니다. 이는 여러 활동에서 발생합니다. 나는 애플 리케이션에 걸쳐 공유에 대해 물었다. –