Remote Compose, uygulamanızda Compose tarzı API'lerle kullanıcı arayüzü oluşturmanıza ve bunu uygulama widget'ları veya Wear OS widget'ları gibi sistem işlemlerinde görüntülemenize olanak tanıyan bir Jetpack kitaplığıdır. Uygulamanız, kullanıcı arayüzünü kompakt bir doküman olarak kaydeder ve ana makine işlemindeki bir oynatıcı, uygulamanızı geri çağırmadan kullanıcı arayüzünü oluşturur ve etkileşimleri, durum değişikliklerini ve animasyonları yerel olarak işler.
Bu kılavuzda, Remote Compose mimarisi ve standart Jetpack Compose'dan farkları açıklanmaktadır. Bu kılavuzda, bileşenlerle kullanıcı arayüzü oluşturma konusu ele alınmaktadır.
Uzaktan oluşturma kullanım alanları
Uzaktan Oluşturma, destekleyen bir oynatıcıya sahip her yüzeyde kullanılabilir. Android'de uygulama widget'larını ve Wear OS widget'larını destekler.
İşleyiş şekli: Üç bloklu mimari
Remote Compose ile standart Jetpack Compose arasındaki temel mimari fark, kullanıcı arayüzü tanımının üç üst düzey blokta yürütmeden ayrılmasıdır:
- Dokümanı oluşturma: Uygulamanız, bir dokümanı kaydetmek için
@RemoteComposableişlevlerinizi çalıştırır. Bu doküman; düzeni, uzak durumu ve işlemleri dahil olmak üzere kullanıcı arayüzünün kompakt, serileştirilmiş bir açıklamasıdır. Verileriniz değiştiğinde uygulamanız yeni bir doküman kaydedip gönderebilir. - Dokümanı uzak ana makineye taşıma: Uygulamanız, dokümanı ana makineye (ör. başlatıcı veya Wear OS gibi dokümanı görüntüleyen işleme) iletir.
- Dokümanı oynatma: Ana makinedeki bir Remote Compose oynatıcı, dokümanı oluşturur ve düzen, giriş, kullanıcı deneyimi durumu değişiklikleri ve animasyonları uygulamanızı geri çağırmadan yerel olarak işler.
Bu mimari, gecikmeyi doğrudan azaltan temel avantajlar sağlar:
- Küçük belge boyutu: Serileştirilmiş belge anlık görüntüleri küçük ve hafiftir.
- Daha az gidiş dönüş: Uzak ana makine oynatıcısı, etkileşim ve durum değişikliklerini yerel olarak işlediğinden uygulamaya veya sunucuya gidiş dönüş iletişimleri en aza indirilir.
Web sayfası/HTML benzetmesi: Remote Compose, bir web sayfası sunmaya benzer şekilde çalışır. Uygulama sunucusu bir kez HTML/belge yapısı oluşturup gönderir ve tarayıcı ana makinesi bunu oluşturup etkileşimleri arka ucu sürekli sorgulamadan yerel olarak işler.
Bileşenler
Remote Compose, düzenleri yapılandırmak için üst düzey kullanıcı arayüzü bileşenleri sağlar. Standart Compose eşdeğerleri yerine Remote Compose bileşenlerini ve RemoteModifier kullanın. Bunlar arasında temel düzen kapsayıcılarının yanı sıra dinamik ekran boyutlarını işlemek için özel olarak tasarlanmış uyarlanabilir bileşenler de yer alır:
- Temel düzen bileşenleri:
RemoteBox,RemoteRowveRemoteColumngibi yaygın Compose benzeri düzen öğeleri. - Uyarlanabilir düzen bileşenleri: Uzak yüzeylere sorunsuz bir şekilde uyum sağlayacak şekilde tasarlanmış
RemoteFitBox,RemoteCollapsibleRowveRemoteCollapsibleColumngibi özel bileşenler. - Materyal Tasarım teması: Tema, Wear OS widget'ları için de aynı şekilde çalışır.
RemoteMaterialThemetarafından sağlanan renk ve tipografi hiyerarşisi kullanılır. Bu sayede, uygulamanız ve widget'larınız genelinde tutarlı bir marka ve tasarım sistemi uygulaması elde edebilirsiniz.
RemoteCanvas ile özel çizim
Özel grafikler ve zamana dayalı animasyonlar için RemoteCanvas kullanın. Bu, oynatıcının ana makinede çalıştırdığı çizim komutlarını kaydeder. Bu kılavuzda, bileşenlerle kullanıcı arayüzü oluşturma konusu ele alınmaktadır.
Temel farklar
Remote Compose'un durumu, mantığı ve işlemleri nasıl yönettiğini anlamak için aşağıdaki temel kavramları inceleyin.
Sembolik durum referansları
Standart Compose'da durum kapsayıcıları, yerel uygulama belleğinde etkin ve okunabilir değerler tutar. Bu değerler, olaylar gerçekleştiğinde uygulama kodu (lambda'lar) tarafından değiştirilir. Remote Compose'da durum bildirimleri, sembolik referanslar olarak işlev görür. Etkin değerleri yerel uygulama belleğinde tutmak yerine, uzak oyuncunun çalışma zamanında yerel olarak yönettiği ve güncellediği bağlamaları bildirirler. Remote Compose'da durumu bildirirken aşağıdaki hususları göz önünde bulundurun:
rememberMutableRemoteInt,rememberMutableRemoteFloatveyarememberMutableRemoteStringgibi durumları bildirmek için Remote Compose fabrika işlevlerini kullanın.- Uygulama kodunuz, oluşturma sırasında uzak durum değişkeninin değerini doğrudan inceleyemez veya okuyamaz.
- Oynatıcı, kullanıcı dokümanla etkileşimde bulundukça bu değerleri yerel olarak depolar ve günceller.
Uzaktan durum ve Kotlin kontrol akışı
Kotlin kodunuz yalnızca uygulamanız dokümanı oluşturduğunda çalışır. if, when ve for gibi Kotlin ifadeleri, dokümanı o anda bilinen değerlere göre şekillendirebilir (ör. bir listedeki her öğe için bir satırı tekrarlayabilir) ancak daha sonra değişen uzak bir duruma tepki veremez. Uzaktan Oluşturma'da çalışırken aşağıdakileri göz önünde bulundurun:
- Dallanma mantığı: Dinamik kullanıcı arayüzü geçişi, durumu farklı
RemoteComposablealanlarıyla eşleyerekRemoteStateLayoutkullanılarak yapılır. - Metin değerlendirme: Yalnızca doküman oluşturulduğunda değerlendirilen standart Kotlin dize interpolasyonundan ("
$remoteValue") kaçının. Bunun yerineRemoteStringdeğeriniRemoteTextyöntemine iletin.
RemoteModifier kullanarak dinamik stil oluşturma
Ana makinedeki dinamik stil, oluşturmayı yeniden çalıştırmaz. Bunun yerine, uzak durum değişkenleri doğrudan RemoteModifier.background(remoteColor) gibi değiştiricilere iletilir.
Uzak sistem bağlamı
LocalConfiguration veya LocalDensity gibi CompositionLocal sağlayıcıları, yalnızca belgenin kaydedildiği andaki yerel uygulama ortamını yansıtır. Yüzey yeniden boyutlandırıldığında, görüntüleme durumunu değiştirdiğinde veya zaman içinde ilerlediğinde uzak ana makinede dinamik olarak güncellenmezler. Bunun yerine, oynatıcının çalışma zamanında ana makinede çözdüğü değerleri kullanın. Örneğin, bileşenin mevcut boyutu, RemoteConfiguration veya RemoteDensity.
Bildirimsel işlemler
Standart Compose'da tıklama işleyiciler, uygulamanızda çalışan lambda'lardır. Ana makine, uygulamanızın kodunu çalıştıramaz. Bu nedenle, Remote Compose'da bunun yerine işlem (ör. RemoteModifier.clickable(action) ile) eklersiniz. İşlemler, valueChange ile doğrudan ana makinedeki uzak durumu güncelleyebilir veya pendingIntentAction ya da hostAction ile uygulamanıza veya ana makineye aktarabilir. Tek bir tıklamayla birden fazla işlem çalıştırmak için combinedAction kullanın.
Üst düzey paradigma karşılaştırması
Özellik alanı |
Standart Jetpack Compose |
Uzaktan Oluşturma |
|---|---|---|
Tıklama ve dokunma etkinlikleri |
İşlem içi eşzamanlı lambda'lar |
Bildirim temelli serileştirilmiş Action nesneleri |
Koşullu mantık |
Kotlin'de if ve when kontrol akışı |
Standart Kotlin Dinamik dallanma, |
Kontrol akışı döngüleri |
Standart Kotlin for ve while döngüleri |
Standart Kotlin döngüleri (repeat, for, forEach) yalnızca doküman oluşturulduğunda çalışır. Ana makinedeki uzak durum üzerinde döngü oluşturamazlar. |
Yürütme ana makinesi |
Uygulama süreci |
Başlatıcı (AppWidget), Wear OS widget'ları veya destekleyici oynatıcı içeren herhangi bir form faktörü |
İşlem yaşam döngüsü |
Yeniden oluşturma ve oluşturma için işlemin etkin kalması gerekir |
İşlem kayıtları kullanıcı arayüzü anlık görüntü dokümanı; Remote Player motoru, bileşen ağacını ayrıştırır, durum değişikliklerini izler ve uygulamayı geri çağırmadan yerel olarak yeniden çizer. |
Yan etkiler |
Eş yordam yaşam döngüleri (LaunchedEffect) |
Ana makinede kullanılamaz. Oluşturma, dokümanı oluşturmak için uygulamanızda çalışır. Bu nedenle, entegrasyon bir oluşturmayı açık tutmadığı sürece eş yordam efektleri uzak kullanıcı arayüzünü yönlendiremez. |
Durum paradigması |
Yerel bellek durumu değerleri |
Ham değerler yerine sembolik durum referansları döndüren fabrika işlevleri (rememberMutableRemoteInt(), rememberNamedRemoteColor()). |