FrameLayout 위에 Fragment 를 올려둔다면 Fragment 를 잘못 사용하거나, 구성요소 변경(Configuration change) 로 복원되는 경우 아래와 같은 에러를 만날 수 있습니다. 에러는 간단 합니다 상태를 저장하는 onSaveInstanceState 콜백 이후에 Commit 하려 했으니 상태를 저장할 수 있는 단계가 넘어간 상태이기에 불가능 한 상태라는 의미 입니다.
결국 FrameLayout 위에 Fragment 를 올려두게 되면, 상태에 대해 잘 다뤄줘야 합니다. 상태 저장 상관 없이 사용하고 싶다면 commit 이 아닌, commitAllowingStateLoss 메서드를 명시적으로 호출해줘야 합니다.
기본적으로 FragmentContainerView 는 FrameLayout 을 상속하고 있습니다.
또한 FragmentContainerView 를 사용하게 되면, 내부에서 상태 저장 상관 없이 사용하도록 강제하고 있습니다.
따라서 이따금식 상태 복원할 때, 저장된 상태가 없어 다시 필요한 정보를 메모리에 올려두거나 해야하는 단점은 있지만, 위의 크래시 발생은 막을 수 있습니다.
그래서 저는 주관적인 생각으로 FragmentContainerView 를 사용하는 것이 안정성 있는 앱을 개발하는 방향에서 유리하다고 생각합니다. 또한 부가적으로 setLayoutTransition 처럼 여러 Fragment 들을 관리할 때 트랜지션 처리나, setOnApplyWindowInsetsListener 와 같이 WindowInset 도 제공하여 FrameLayout 을 사용할 때 보다 신경쓸 것들이 덜 합니다.
그럼 20000
'Android > Development Tips' 카테고리의 다른 글
Summary MVI 직접 작성 해야/하지 않아야 하는 이유 (0) | 2023.01.05 |
---|---|
확대, 축소, 이동, 회전 가능한 컴포즈 뷰 (0) | 2022.12.30 |
간단 Tips. Lottie 에서 Url 을 통해 로드할 때, Unable to parse composition 에러가 발생한다면 ? (0) | 2022.11.30 |
간단 Tips. 코루틴 SupervisorJob 또는 SupervisorScope 를 사용해야 하는 경우 (0) | 2022.11.29 |
간단 Tips. Lottie 가 Android, iOS, Web, Window 등 에서 다르게 보인다면? (0) | 2022.11.29 |