어느 동작을 할 때 UI가 멈추는지 살펴봅니다.
해당 동작과 연결된 모든 코드를 주석 처리하고, 각 단계별로 주석을 해제해가며 UI가 멈추는 정확한 지점을 찾습니다.
UI가 멈추는 정확한 지점의 변수나 코드, 연결된 객체가 어떤 것이 있는지 살펴봅니다.
현재까지 제가 겪은 경험대로라면, Observable 객체에 대한 event로 인해 무한루프가 발생해서 UI가 freezing되는 경우가 있었습니다. 다른 원인으로 경험해본 건 아직 없네요. (UI가 느려지는 경우는 있었는데, 이건 다른 원인이었기 때문에 별도의 글로 작성했습니다.)
하나의 Observable(GetX의 Rx 객체 등) 객체에 대한 event로 인해 무한루프가 발생하는 경우, 무한루프로 인해 UI Freezing이 발생합니다.
a를 초기화 → event 실행 → a 초기화 → event 실행 → a 초기화 → event 실행 → ...
처럼 무한루프가 생길 수 있습니다.// 무한루프를 발생시키는 코드 예시
requestBuyEntity.listen((requestData) async {
// requestBuyEntity가 계속 변하는 것으로 취급되서, useCase가 계속 실행된다.
requestBuyEntity.value = await _tradeCheckValidBuyRequestUseCase.call(requestData);
});