ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 유형

    1. 컴파일러가 Stable한 것으로 판별 - 원시 타입, 문자열, 함수 (람다)
    2. Stable하지만 변경 가능 - MutableState 타입
      • value를 변경할 수 있으나, 변경되면 알림이 전송되어 Stable한 것으로 본다.
    3. @Stable 사용

    댓글