Güçlü atlama modu

Güçlü Atlama, Oluşturma derleyicisinde kullanılabilen bir moddur. Etkinleştirildiğinde, derleyicinin davranışını iki şekilde değiştirir:

ziyaret edin.

Güçlü atlama modunu etkinleştir

Gradle modülünde güçlü atlama özelliğini etkinleştirmek için Gradle yapılandırmanızın composeCompiler bloğu:

android { ... }

composeCompiler {
   enableStrongSkippingMode = true
}

Oluşturulabilir atlanabilirlik

Güçlü atlama modu, normalde uygulanan kararlılık kurallarının bazılarını rahatlatır bu özelliği Compose derleyicisi ile test edebilirsiniz. Ölçüt Varsayılan olarak, Compose derleyicisi, bağımsız değişkenlerinin sabit değerlere sahip olması gerekir. Güçlü atlama modu bunu değiştirir.

Güçlü atlama etkinken, yeniden başlatılabilen tüm composable işlevleri atlanabilir. Bu durum, parametrelerin kararsız parametreleri olsa da olmasa da geçerlidir. Yeniden başlatılamayan composable işlevler atlanamaz olarak kalır.

Ne zaman atlanır?

Yeniden besteleme sırasında bir composable'ın atlanıp atlanmayacağını belirlemek için Compose, her parametrenin değerini önceki değerleriyle birlikte döndürür. Karşılaştırma türü parametrenin kararlılığına bağlıdır.

  • Kararsız parametreler, örnek eşitliği kullanılarak karşılaştırılıyor (===)
  • Kararlı parametreler nesne eşitliği kullanılarak karşılaştırılıyor (Object.equals())

Tüm parametreler bu koşulları karşılıyorsa Compose, şu işlem sırasında composable'ı atlar: bile olabilir.

Güçlü atlama özelliğini devre dışı bırakmak için bir composable isteyebilirsiniz. Yani, projenizin kapsamını hem yeniden başlatılabilir hem de atlanamayan bir composable istiyorsunuz. Bu durumda, @NonSkippableComposable ek açıklaması.

@NonSkippableComposable
@Composable
fun MyNonSkippableComposable {}

Sınıflara sabit olarak not ekle

Bir nesnenin örnek eşitliği yerine nesne eşitliği kullanan bir nesne olmasını istiyorsanız belirtilen sınıfa @Stable ile not eklemeye devam edin. Örneğin, Çevik yaklaşımın yapması gereken şey, tüm nesne listesini gözlemlemek, Oda, herhangi bir zamanda listedeki her öğe için yeni nesneler ayıracağından şekilde değiştirebilirsiniz.

Lambda notu

Güçlü atlama modu, lambda'ların daha fazla hatırlatılmasını da sağlar bir araya getirilebilir. Güçlü atlama etkin olduğunda, bir composable işlev otomatik olarak hatırlanır.

Örnekler

Güçlü atlama işlevi kullanılırken composable'ların içindeki lambda'ların hatırlanmasını sağlamak için derleyici, lambdanızı bir remember çağrısıyla sarmalar. Şununla anahtarlanır: lambda.

Lambda'nızın olduğu bir durumu aşağıdaki örnekte gösterildiği gibi düşünün:

@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
    val lambda = {
        use(unstableObject)
        use(stableObject)
    }
}

Güçlü atlama etkin olduğunda derleyici, lambda'yı sarmalayarak not eder. bir remember araması:

@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
    val lambda = remember(unstableObject, stableObject) {
        {
            use(unstableObject)
            use(stableObject)
        }
    }
}

Tuşlar, composable işlevlerle aynı karşılaştırma kurallarını izler. Çalışma zamanı örnek eşitliğini kullanarak kararsız anahtarları karşılaştırır. Stabil anahtarları olacaktır.

Notlandırma ve yeniden beste

Bu optimizasyon, çalışma zamanı açısından en önemli atlama oluyor. Notlandırma olmadan çalışma zamanının çok daha sırasında lambda parametresi alan herhangi bir composable'a bile olabilir. Sonuç olarak, yeni lambda bile olabilir. Bu işlem yeniden düzenlemeyle sonuçlanır.

Not tutmaktan kaçının

Hatırlamak istemediğiniz bir lambda varsa @DontMemoize öğesini kullanın ek açıklaması da yer alır.

val lambda = @DontMemoize {
    ...
}

APK Boyutu

Atlanabilir Composable'lar derlendiğinde, composable'ları kullanıma sunduk. Güçlü atlama etkinken derleyici, neredeyse tüm composable'ları atlanabilir olarak işaretler ve tüm lambda'ları remember{...} Bu nedenle, güçlü atlama modunun etkinleştirilmesi, uygulamanızın APK boyutuna etkisi.

Now In Android uygulamasında güçlü bir atlama özelliğinin etkinleştirilmesi, APK'nın 4 kB'a yükseldi. Boyuttaki fark büyük ölçüde önceki ilgili uygulamada mevcut olan ancak olması gereken atlanamayan composable'lar nispeten küçük olabilir.