[Flutter] 화면이 아예 build되지 않고 앱이 멈추는 오류/Freezing(프리징) 오류

sumong·2023년 1월 8일
0

Flutter 오류 대응

목록 보기
13/15
post-thumbnail

진단 방법

  1. 어느 동작을 할 때 UI가 멈추는지 살펴봅니다.

  2. 해당 동작과 연결된 모든 코드를 주석 처리하고, 각 단계별로 주석을 해제해가며 UI가 멈추는 정확한 지점을 찾습니다.

  3. UI가 멈추는 정확한 지점의 변수나 코드, 연결된 객체가 어떤 것이 있는지 살펴봅니다.

원인 및 해결책

현재까지 제가 겪은 경험대로라면, Observable 객체에 대한 event로 인해 무한루프가 발생해서 UI가 freezing되는 경우가 있었습니다. 다른 원인으로 경험해본 건 아직 없네요. (UI가 느려지는 경우는 있었는데, 이건 다른 원인이었기 때문에 별도의 글로 작성했습니다.)

하나의 Observable(GetX의 Rx 객체 등) 객체에 대한 event로 인해 무한루프가 발생하는 경우, 무한루프로 인해 UI Freezing이 발생합니다.

  • 예를 들면, Observable 객체 a에 대해 a를 다른 방식으로 초기화하는 이벤트 event가 걸려 있다면,
    a를 초기화 → event 실행 → a 초기화 → event 실행 → a 초기화 → event 실행 → ... 처럼 무한루프가 생길 수 있습니다.
// 무한루프를 발생시키는 코드 예시
requestBuyEntity.listen((requestData) async {
	// requestBuyEntity가 계속 변하는 것으로 취급되서, useCase가 계속 실행된다.
	requestBuyEntity.value = await _tradeCheckValidBuyRequestUseCase.call(requestData);
});
  • 이를 해결하려면, 하나의 Observable로 구성된 객체를 2개로 분리하는 등의 방법을 통해 무한루프가 발생하지 않도록 코드를 재설계해야 합니다.
profile
Flutter 메인의 풀스택 개발자 / 한양대 컴퓨터소프트웨어학과, HUHS의 화석

0개의 댓글