0

에 데이터를 제공하기 위해 (첫 번째 목록,지도에서 다른 쇼 핀을 보여줍니다) IntentService를 사용하여 데이터를 둘 다 제공해야합니까? 그렇다면 시작된 서비스 또는 바운드 서비스 방식을 사용해야합니까?서비스 ListActivity와 MapAcitivity

답변

1

당신은 서비스에 활동을 결합 할 수있다, http://developer.android.com/reference/android/app/Service.html를 참조하십시오.

당신의 Service, 예를 들어,에 Binder 인터페이스의 구현을 만들기 당신의 활동에

public class ServiceBinder extends Binder { 
    public MyService getService() { 
     return MyService.this; 
    } 
} 

, 당신이 당신의 서비스에 대한 액세스를 제공하는 데 사용되는 새로운 ServiceConnection 클래스 생성 :

여기
private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     mMyService = ((MyService.ServiceBinder)service).getService(); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mMyService = null; 
    } 
}; 

멤버 변수 mMyService 당신의 모든 공용 멤버에 액세스 할 수 있습니다 당신의 서비스 클래스.

는 연결을 만들 당신의 활동에 doBindServicedoUnbindService을 구현하는 방법은 다음과 같습니다이 도움이

void doBindService() { 
    bindService(new Intent(this, MyService.class), mConnection, Context.BIND_AUTO_CREATE); 
} 

void doUnbindService() { 
    // Detach our existing connection. 
    unbindService(mConnection); 
} 

희망을!

+0

답변 해 주셔서 감사합니다. 나는 의심이 하나있다. 이 문서에서는 아무 것도 서비스에 묶이지 않으면 (바운드 서비스 접근 방식으로) 중지 할 것이라고 말합니다. 그리고 내가 명성과 지도력 사이를 전환 할 때 나는 그것을 하나로 묶어서 다른 것과 묶어야한다고 생각합니다. 이 활동들 사이를 전환 할 때 서비스가 중단되거나 뭔가 빠졌음을 의미합니까? –

+0

오, 이제 알았어. 그래서 바인더를 사용하는 것입니다. 서비스는 백그라운드에서 작동하며 활동은 바인더를 통해 서비스에 연결됩니다. 권리? 그리고 작업을 마치면 stopSelf()를 사용하여 서비스를 중단합니까? –

+1

예, 그 아이디어입니다. 명시 적으로 멈출 때까지 서비스를 계속 실행하려면 서비스의'onStartCommand'에서'START_STICKY'를 반환하십시오. –