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:

Güçlü atlama modunu etkinleştir

Önceki bir sürümdeki Gradle modülü için güçlü atlama özelliğini etkinleştirmek isterseniz Gradle yapılandırmanızın composeCompiler bloğuna aşağıdaki seçeneği ekleyin:

android { ... }

composeCompiler {
   enableStrongSkippingMode = true
}

Kompozit atlanabilirlik

Güçlü atlama modu, atlama ve birleştirilebilir işlevler söz konusu olduğunda Compose derleyicisi tarafından normalde uygulanan istikrar kurallarının bazılarını gevşetir. Compose derleyicisi, varsayılan olarak tüm bağımsız değişkenlerinin sabit değerlere sahip olduğu bir birleştirilebilir işlevi atlanabilir olarak işaretler. Güçlü atlama modu bunu değiştirir.

Güçlü atlama etkinleştirildiğinde, yeniden başlatılabilen tüm birleştirilebilir işlevler atlanabilir hale gelir. Bu durum, parametrelerin kararsız parametreleri olsa da olmasa da geçerlidir. Yeniden başlatılamayan composable işlevler atlanabilir değildir.

Ne zaman atlamalısınız?

Oluşturma, yeniden oluşturma sırasında bir bileşenin atlanıp atlanmayacağını belirlemek için her parametrenin değerini önceki değerleriyle karşılaştı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ır.
  • 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 Oluştur, yeniden oluşturma sırasında derlenebilir öğeyi atlar.

Güçlü atlama özelliğini devre dışı bırakmak için bir bileşen kullanabilirsiniz. Yani yeniden başlatılabilir ancak atlanabilir olmayan bir bileşen oluşturmak isteyebilirsiniz. Bu durumda, @NonSkippableComposable ek açıklamasını kullanın.

@NonSkippableComposable
@Composable
fun MyNonSkippableComposable {}

Sınıflara sabit olarak not ekle

Örnek eşitliği yerine nesne eşitliği kullanan bir nesne istiyorsanız ilgili sınıfı @Stable ile notlandırmaya devam edin. Bunu yapmanız gereken durumlara örnek olarak, bir nesne listesinin tamamını gözlemlerken oda gibi veri kaynakları, bir değişiklik olduğunda listedeki her öğe için yeni nesneler ayırır.

Lambda notu

Güçlü atlama modu, composable'ların içinde lambda'ların daha fazla hatırlatılmasını da sağlar. Güçlü atlama etkinleştirildiğinde, birleştirilebilir işlev içindeki her lambda otomatik olarak hatırlanır.

Örnekler

Güçlü atlama ayarı kullanılırken composable'ların içindeki lambda'ların hatırlanması için derleyici, lambda'nızı bir remember çağrısıyla sarmalar. Lambda görüntüleriyle kilitlendi.

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ı bir remember çağrısına sarmalayarak notlandırır:

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

Anahtarlar, birleştirilebilir işlevlerle aynı karşılaştırma kurallarına uyar. Çalışma zamanı, kararsız anahtarları örnek eşitliğini kullanarak karşılaştırır. Nesne eşitliğini kullanarak kararlı anahtarları karşılaştırır.

Hatırlama ve yeniden derleme

Bu optimizasyon, yeniden düzenleme sırasında çalışma zamanının atladığı composable'ların sayısını büyük ölçüde artırır. Hatırlama olmadan, çalışma zamanında, yeniden derleme sırasında lambda parametresi alan herhangi bir bileşene yeni bir lambda atanması çok daha olasıdır. Sonuç olarak yeni lambda, son bileşime eşit olmayan parametrelere sahiptir. Bu işlem yeniden düzenlemeyle sonuçlanır.

Not tutmaktan kaçının

Hatırlamak istemediğiniz bir lambda varsa @DontMemoize ek açıklamasını kullanın.

val lambda = @DontMemoize {
    ...
}

APK Boyutu

Atlanabilir Composable'lar derlendiğinde, atlanabilir olmayan Composable'lara kıyasla daha fazla kod oluşturulur. Güçlü atlama etkinleştirildiğinde derleyici, neredeyse tüm derlenebilir öğeleri atlanabilir olarak işaretler ve tüm lambdaları bir remember{...} içine sarar. Bu nedenle, güçlü atlama modunu etkinleştirmenin, uygulamanızın APK boyutu üzerinde çok küçük bir etkisi vardır.

Now In Android uygulamasında güçlü bir atlama özelliğinin etkinleştirilmesi, APK boyutunu 4 kB artırdı. Boyuttaki fark büyük ölçüde, ilgili uygulamada daha önce bulunan atlanabilir olmayan bileşenlerin sayısına bağlıdır ancak nispeten küçük olmalıdır.