Güçlü Atlama, Oluşturma derleyicisinde kullanılabilen bir moddur. Etkinleştirildiğinde derleyicinin davranışını iki şekilde değiştirir:
- Kararsız parametrelere sahip besteler atlanabilir hale gelir
- Kararsız çekimlere sahip Lambda'lar hatırlanır
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.