6

애플리케이션의 여러 부분에서 공유되는 플로블이 있다고 가정 해 보겠습니다.처리해야 할 사항() LiveDataReactiveStreams를 사용하여 만든 게시자

관찰하고자하는 각 조각에서 누출 및 충돌을 피하기 위해 LiveDataReactiveStreams.fromPublisher으로 LiveData로 변환합니다. 이제 Flowable을 래핑하는 LiveData가 생겼습니다.

그런 다음 ViewModel (ViewModelFactory의)에 내 ViewModel에 LiveData를 전달합니다. 내가 아는 한, 누출에 대해 걱정하지 않고 LiveData를 사용할 수 있습니다.

이제 LiveData를 직접 관찰하는 대신 LiveDataReactiveStreams.toPublisherFlowable.fromPublisher을 사용하여 Flowable로 다시 변환하고 Flowable에 가입하려고합니다. Flowable을 래핑하는 LiveData를 래핑하는 Flowable입니다.

제 질문은 :이 Flowable에 대한 구독을 처분해야합니까? 내 희망은 LiveData가 "장벽"으로 작용하여 내 맥락이 플로 플라이 루트로 유출되지 못하도록 방지하지만 그 점에 대해서는 확실하지 않습니다. 환언

:

  1. 유동성 글로벌 문맥은 단편의 속성으로 설정되어 LiveData B에 싸여 각 프래그먼트
  2. , 존재 뷰 모델
  3. 평소에 LiveData B을 관찰했을 때 대신 Flowable로 마무리했습니다. C
  4. C를 유동 및 단편이 파괴 될 때 최대 누설 C에서 액세스 반환 일회용

윌보기 무시 가입?

답변

1

current implementation을 고려하면 여전히 구독을 수동으로 관리해야합니다. 라이프 사이클은 실제 데이터를 관찰하는 데만 사용됩니다.

mLiveData.observe(mLifecycle, LiveDataSubscription.this); 

긍정적 인 양의 항목이 요청되어 오류가 전송 된 경우에만 관찰이 자동으로 취소됩니다. 그런 다음 구독을 취소합니다. 제작자가 완료하지 않으므로 구독 자체를 처분하지 않으므로 직접 처분하지 않으면 구독이 누출됩니다.

+0

나는 그것이 나를 구독 취소하지 않는다는 것을 이해하지만 나의 질문은 : 조각이 파손되었을 때 실제로 누출 될 것인가? 그렇다면 어디서/어떻게이 누수가 발생합니까? –

+0

구독자가 게시자에게 유출됩니다. – tynn

+0

나는 지금까지 당신과 함께하고 있지만 조각이 GC : ed 일 때 게시자가 GC : ed (구독과 함께)가되지 않습니까? 내가 볼 수있는 한 여기에 작성된 모든 참조는 순환으로 이루어 지므로 누출이 발생하지 않도록해야합니다 (분명히 바보 같은 일을하지 않는 한). –