상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
태평양의 해양관측 기술에는 어떤 것들이 있나요?
여자한테 고백 멘트에서 핵심 포인트는 무엇인가?
특별한 날이 아닌 평범한 날 여자한테 고백 멘트를 하기 좋을까?
썸탈때 손깍지를 하기 전에 반드시 확인해야 할 것은 무엇인가요?
썸탈때 손깍지를 하는 도중에 불편함을 느끼면 어떻게 해야 하나요?
상추를 키우는 과정에서 주의할 점은 무엇인가요?
항공 승무원으로서의 미래 전망에 대해 어떻게 생각하시나요?
상악동 관련 질환의 예방을 위한 식단은 어떤 것들이 있나요?
안사귀는데 손깍지를 하면 나중에 어떻게 될 가능성이 높을까?
양상추를 활용한 요리 수업은 어디에서 하나요?
소개팅 만나서 사귀고 한달만에 헤어짐 후 그 사람과 다시 만나거나 연락을 해볼 생각이 있나요?
소개팅 만나서 사귀고 한달만에 헤어짐의 아픔을 극복하기 위해 찾아본 자료는?
Previous
Next
수정하기 - LiveData로 서비스와 통신하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
LiveData로 서비스(Service)와 통신하는 방법은 주로 안드로이드 아키텍처 컴포넌트에서 ViewModel과 LiveData를 활용하여 UI와 백그라운드 로직(서비스) 사이에 데이터를 효율적으로 주고받는 패턴과 관련되어 있습니다. 여기서 “서비스”가 안드로이드의 Service 컴포넌트를 의미하는지, 아니면 백엔드 API 등의 네트워크 서비스인지는 명확하지 않지만, 일반적으로 앱 내 Service 컴포넌트와 LiveData로 통신하는 방법에 대해 설명드리겠습니다. --- 1. LiveData와 Service 컴포넌트의 개념 - LiveData 는 라이프사이클을 인식하는 옵저버블 데이터 홀더로, UI 컴포넌트(Activity/Fragment)에서 데이터 변화를 관찰할 수 있습니다. - Service 는 백그라운드 작업을 수행하는 컴포넌트로, UI와 별도로 실행되기 때문에 직접 UI에 접근할 수 없습니다. - 따라서, Service에서 발생하는 데이터를 LiveData에 연결해 UI에 알릴 수 있어야 합니다. --- 2. Service와 LiveData 간 통신 구현 방법 2-1. ViewModel을 통한 중계자 역할 - UI는 ViewModel에 연결되어 있고, ViewModel은 LiveData 객체를 통해 데이터를 노출. - Service는 ViewModel이나 LiveData 객체와 직접적으로 연결되기는 어렵기 때문에, 보통 다음과 같은 접근법 사용. 2-2. Service에서 브로드캐스트나 콜백으로 이벤트 발생 - Service 내에서 데이터를 처리한 후, 변동사항을 브로드캐스트 또는 콜백 인터페이스로 외부에 전달. - ViewModel 또는 UI 컴포넌트에서 이 이벤트를 수신하고, LiveData를 업데이트. 예시: - Service가 데이터를 변경하거나 상태 업데이트 시 LocalBroadcastManager 또는 EventBus, 혹은 바인딩된 콜백을 이용해 신호 전송. 2-3. ViewModel에서 Service 상태 관찰 후 LiveData 반영 - ViewModel은 Service 상태를 관찰하고, 내부적으로 MutableLiveData를 가지고 있어 Service 이벤트를 받아 LiveData 값을 갱신. - UI는 이 LiveData를 구독하여 데이터 변화를 반영. --- 3. 더 구체적인 구현 방법 3-1. Bound Service와 LiveData - ViewModel에서 Service에 바인딩하여 직접 메서드 호출 및 콜백 등록 - Service는 콜백 인터페이스를 통해 ViewModel에 상태나 데이터를 전달 - ViewModel은 전달받은 데이터를 MutableLiveData에 setValue/postValue 하여 변경 알림 발생 3-2. BroadcastReceiver를 사용한 데이터 전달 - Service가 LocalBroadcast 또는 일반 Broadcast를 발생하면 - ViewModel 또는 UI 컴포넌트가 BroadcastReceiver를 등록해 수신 - 수신된 데이터를 LiveData에 반영 3-3. EventBus 라이브러리 활용 - Service가 EventBus를 통해 이벤트 송출 - ViewModel 또는 UI에서 구독하고 LiveData 갱신 --- 4. 예시 상황: Bound Service와 LiveData 1. Service 생성 : 백그라운드 작업 처리 및 상태 업데이트 콜백 정의 2. ViewModel : Service 바인딩, 콜백 등록, MutableLiveData 선언 3. UI(Fragment/Activity) : ViewModel의 LiveData 관찰 ```kotlin class MyService : Service() { interface StatusListener { fun onStatusChanged(status: String) } private var listener: StatusListener? = null fun setStatusListener(listener: StatusListener) { this.listener = listener } fun doWork() { // 작업 수행 listener?.onStatusChanged("작업중") } // ... 바인더 구현 및 기타 Service 코드 } class MyViewModel : ViewModel() { val statusLiveData = MutableLiveData<String>() private var service: MyService? = null private val serviceConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, binder: IBinder?) { service = (binder as MyService.LocalBinder).getService() service?.setStatusListener(object : MyService.StatusListener { override fun onStatusChanged(status: String) { statusLiveData.postValue(status) } }) } override fun onServiceDisconnected(name: ComponentName?) { service = null } } fun bindService(context: Context) { Intent(context, MyService::class.java).also { intent -> context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE) } } } class MyFragment : Fragment() { private val viewModel: MyViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { viewModel.statusLiveData.observe(viewLifecycleOwner) { status -> // UI 업데이트 textView.text = status } viewModel.bindService(requireContext()) } } ``` --- 5. 정리 - LiveData 자체는 데이터 전달 수단이므로, Service가 직접 LiveData 객체를 소유하기보다는 ViewModel에서 Service와 연동해서 LiveData를 관리하는 것이 일반적 - Service는 바인딩, 브로드캐스트, 콜백 등의 여러 방법으로 ViewModel에 데이터를 알리고, - ViewModel은 해당 데이터를 MutableLiveData에 반영해 UI가 관찰하도록 함 - 이렇게 하면, UI는 LiveData 구독을 통해 안전하게 서비스 상태 변화를 반영할 수 있음 --- 필요에 따라 네트워크 서비스(API) 통신 시에도 Retrofit 콜백 결과를 LiveData로 래핑하는 등 다양한 응용이 가능하니, 서비스 내 동작 종류에 따라 통신 방식을 적절히 선택하면 됩니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기