-
[Android] Compose - Lifecycle 정리Android 2024. 3. 15. 17:09반응형
본 포스팅은 Android developer 가이드를 기반으로 작성되었습니다.
Lifecycle
composition의 수명주기는 시작, 재구성(Recomposition, 0회 이상), 종료로 구성.
- composition이란, composable을 실행하여 생성된 UI 구성 요소
Recomposition
UI 상태가 변경될 때 composable을 다시 실행하고 변경 사항을 반영하는 것을 recomposition이라고 한다.
대체로 State 객체가 변경되면 트리거되며 해당 State를 읽는 모든 컴포저블을 실행한다.
- 이전 호출에 호출했으나 입력이 변경되지 않은 composable은 recomposition을 건너 뛸 수 있다.
call site
composable이 호출되는 소스 코드의 위치
- composition 내에 composable 인스턴스는 call state로 식별되고, 각 call site는 고유하다.
- 동일한 call site에서 composable을 여러번 호출할 경우(ex. 반복문)엔 composable을 식별하기 위한 정보로 execution order를 사용한다.
- 그러나 구조를 변경(상단 또는 중간에 요소를 추가, 요소 삭제 및 재정렬)하면 호출 순서가 변경되고, 위치가 변경된 모든 요소에서 recomposition이 발생
- 해결하기 위한 방법으로 key composable을 이용해 고유한 키를 지정
key composable
composition에서 composable 인스턴스를 식별하기 위한 키를 지정
위와 같이 동일한 call site에서 호출이 여러번 일어날 때 side-effect를 막는데 효과적이다.
@Composable fun MoviesScreenWithKey(movies: List<Movie>) { Column { for (movie in movies) { key(movie.id) { // Unique ID for this movie MovieOverview(movie) } } } }
Skipping recomposition
composition에 모든 입력이 stable하고, 변경되지 않았다면 recomposition을 건너 뛸 수 있다.
- 변경 여부는 equals 메서드를 이용해 비교한다.
Stable Type
stable type이란, 이전에 전달된 데이터가 변경되지 않는 것이 보장된 다는 것으로 아래 사항을 만족한다.
- 같은 두 인스턴스의 equals 결과는 동일하다.
- 모든 public property는 stable
- public property가 변경된다면, composition에 알림
Stable Type 유형
- 컴파일러가 Stable한 것으로 판별 - 원시 타입, 문자열, 함수 (람다)
- Stable하지만 변경 가능 - MutableState 타입
- value를 변경할 수 있으나, 변경되면 알림이 전송되어 Stable한 것으로 본다.
- @Stable 사용
'Android' 카테고리의 다른 글
[Android] AAC-LiveData의 setValue와 postValue (3) 2021.04.23 [Android] FCM을 이용해 Push 구현하기 (28) 2021.04.15 [Android] Notification 구현 예제 및 Channel (0) 2021.04.15 [Android] 스레드(Thread)와 핸들러(Handler), 작업 스레드에서 UI 업데이트 요청하기 (2) 2021.04.14 [Android] JSON 라이브러리 : GSON (0) 2021.04.12