강력한 건너뛰기는 Compose 컴파일러에서 사용할 수 있는 모드입니다. 사용 설정하면 두 가지 방법으로 컴파일러의 동작을 변경합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.강력한 건너뛰기 모드 사용 설정
Gradle 모듈에 강력한 건너뛰기를 사용 설정하려면 다음 옵션을 포함합니다.
Gradle 구성의 composeCompiler
블록을 설정합니다.
android { ... }
composeCompiler {
enableStrongSkippingMode = true
}
구성 가능한 건너뛰기 기능
강력한 건너뛰기 모드는 일반적으로 적용되는 일부 안정성 규칙을 완화합니다. 구성 가능한 함수 건너뛰기와 관련하여 Compose 컴파일러에 의해 작성됩니다. 작성자: 기본적으로 Compose 컴파일러는 구성 가능한 함수를 모두 건너뛸 수 있는 것으로 표시합니다. 인수는 안정적인 값을 갖습니다. 강력한 건너뛰기 모드로 인해 이러한 문제가 달라집니다.
강력한 건너뛰기를 사용 설정하면 다시 시작할 수 있는 모든 구성 가능한 함수가 건너뛸 수 있음. 이는 매개변수가 불안정한지 여부와 관계없이 적용됩니다. 다시 시작할 수 없는 구성 가능한 함수는 건너뛸 수 없습니다.
건너뛰어야 하는 경우
리컴포지션 중에 컴포저블을 건너뛸지 결정하기 위해 Compose는 각 매개변수의 값을 이전 값과 비교합니다. 비교 유형 매개변수의 안정성에 따라 달라집니다.
- 불안정한 매개변수는 인스턴스 동등성 (
===
)을 사용하여 비교됩니다. - 객체 동등성 (
Object.equals()
)을 사용하여 안정적인 매개변수를 비교합니다.
모든 매개변수가 이러한 요구사항을 충족하면 Compose는 재구성할 수 있습니다
컴포저블에서 강력한 건너뛰기를 선택 해제하는 것이 좋습니다. 다시 말해
다시 시작할 수 있지만 건너뛸 수 없는 컴포저블을 원하는 경우 이 경우
@NonSkippableComposable
주석
@NonSkippableComposable
@Composable
fun MyNonSkippableComposable {}
클래스를 안정적인 것으로 주석 처리
인스턴스 동등성 대신 객체 동등성을 사용하는 객체를 원하는 경우 지정된 클래스에 계속 @Stable로 주석을 추가합니다. 예를 들어 이 작업은 객체의 전체 목록을 관찰할 때 수행해야 하며, Room은 특정 시점에 특정 시점에 목록의 모든 항목에 새 객체를 할당하므로 변경할 수 있습니다
람다 메모
강력한 건너뛰기 모드는 람다의 기억도 더 많이 사용 설정합니다. 확인할 수 있습니다. 강력한 건너뛰기를 사용하도록 설정하면 구성 가능한 함수가 자동으로 기억됩니다.
예
강력한 건너뛰기를 사용할 때 컴포저블 내에서 람다 메모를 사용하려면
컴파일러가 remember
호출로 람다를 래핑합니다. 이 키는
캡쳐합니다.
다음 예와 같이 람다가 있는 경우를 고려하세요.
@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
val lambda = {
use(unstableObject)
use(stableObject)
}
}
강력한 건너뛰기를 사용 설정하면 컴파일러는 람다를
remember
호출:
@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
val lambda = remember(unstableObject, stableObject) {
{
use(unstableObject)
use(stableObject)
}
}
}
키는 구성 가능한 함수와 동일한 비교 규칙을 따릅니다. 런타임 인스턴스 동등성을 사용하여 불안정한 키를 비교합니다. 안정적인 키를 비교하며 같다고 합니다
메모리 및 리컴포지션
이 최적화는 런타임 시 실행되는 컴포저블의 수를 크게 늘립니다. 리컴포지션 중에 건너뜁니다. 메모가 없으면 런타임이 를 호출하는 동안 람다 매개변수를 사용하는 컴포저블에 새 람다를 할당합니다. 재구성할 수 있습니다 결과적으로 새 람다에는 다음과 같지 않은 매개변수가 있습니다. 확인할 수 있습니다. 그러면 재구성이 발생합니다.
메모 방지
기억하지 않으려는 람다가 있다면 @DontMemoize
를 사용합니다.
주석을 추가합니다.
val lambda = @DontMemoize {
...
}
APK 크기
컴파일할 때 건너뛸 수 있는 컴포저블은 컴파일 시
컴포저블을 사용하는 것이 좋습니다. 강력한 건너뛰기를 사용 설정하면 컴파일러는
거의 모든 컴포저블을 건너뛸 수 있는 것으로 표시하고 모든 람다를
remember{...}
따라서 강력한 건너뛰기 모드를 사용 설정하면
애플리케이션의 APK 크기에
영향을 줄 수 있습니다
Now In Android에서 강력한 건너뛰기를 사용 설정하면 APK가 증가했습니다. 4KB만큼 크게 줄어듭니다. 크기 차이는 대개 이전 버전과 같은 주어진 앱에 있었지만 비교적 사소하지 않습니다.