Ekran özellikleri (ör. ekran modları ve desteklenen HDR türleri), harici olarak bağlanmış ekranlara (HDMI veya DisplayPort ile) sahip cihazlarda (ör. Android TV set üstü kutular ve OTT cihazlar) dinamik olarak değişebilir. Bu değişiklik, kullanıcının bir ekrandan diğerine geçmesi veya cihazı bağlı bir ekran olmadan başlatması gibi bir HDMI hotplug sinyali sonucunda gerçekleşebilir. Android 12 ve sonraki sürümlerde, tak çalıştır ve dinamik ekran özelliklerini işlemek için çerçevede değişiklikler yapıldı.
Bu sayfada, Composer HAL uygulamasında ekran takma/çıkarma işlemlerinin ve ekran özelliklerindeki değişikliklerin nasıl ele alındığı açıklanmaktadır. Ayrıca, ilişkili arabelleklerin nasıl yönetileceği ve bu durumlarda yarış koşullarının nasıl önleneceği de ele alınmaktadır.
Ekran özelliklerini güncelleme
Bu bölümde, Android çerçevesinin Composer HAL tarafından başlatılan ekran özelliklerindeki değişiklikleri nasıl işlediği açıklanmaktadır.
Android'in ekran özelliklerindeki değişiklikleri düzgün şekilde işleyebilmesi için OEM'nin, ekran özelliklerindeki değişiklikleri çerçeveye bildirmek üzere onHotplug(display, connection=CONNECTED) kullanacak şekilde Composer HAL'yi uygulaması gerekir. Bu işlem uygulandıktan sonra Android, ekran özelliklerindeki değişiklikleri aşağıdaki şekilde ele alır:
- Çerçeve, ekran özelliklerinde bir değişiklik algıladığında onHotplug(display, connection=CONNECTED)bildirimi alır.
- Bildirim alındığında çerçeve, görüntüleme durumunu bırakır ve getActiveConfig,getDisplayConfigs,getDisplayAttribute,getColorModes,getHdrCapabilitiesvegetDisplayCapabilitiesyöntemlerini kullanarak HAL'deki yeni özelliklerle yeniden oluşturur.
- Çerçeve yeni bir görüntüleme durumu oluşturduktan sonra, bu tür etkinlikleri dinleyen uygulamalara onDisplayChangedgeri aramasını gönderir.
Çerçeve, sonraki onHotplug(display, connection=CONNECTED) etkinliklerinde çerçeve arabelleklerini yeniden ayırır. Yeni çerçeve arabellekleri ayrılırken hataları önlemek için çerçeve arabellek belleğinin nasıl düzgün şekilde yönetileceği hakkında daha fazla bilgi edinmek için İstemci çerçeve arabelleği yönetimi başlıklı makaleyi inceleyin.
Sık karşılaşılan bağlantı senaryolarını ele alma
Bu bölümde, birincil ekran bağlıyken ve bağlantısı kesilmişken uygulamalarınızdaki çeşitli bağlantı senaryolarının nasıl doğru şekilde ele alınacağı açıklanmaktadır.
Android çerçevesi, mobil cihazlar için geliştirildiğinden bağlantısı kesilmiş bir birincil ekran için yerleşik destek sunmaz. Bunun yerine, birincil ekranın fiziksel olarak bağlantısı kesildiğinde HAL, çerçeveyle etkileşimlerinde birincil ekranı yer tutucu bir ekranla değiştirmelidir.
Aşağıdaki senaryolar, harici olarak bağlanmış ve bağlantısı kesilebilen ekranlara sahip STB'lerde ve TV dongle'larında meydana gelebilir. Bu senaryolar için destek uygulamak üzere aşağıdaki tablodaki bilgileri kullanın:
| Senaryo | Kullanım | 
|---|---|
| Başlatma sırasında bağlı ekran yok | 
 | 
| Birincil ekran fiziksel olarak bağlı olmalıdır. | 
 | 
| Birincil ekranın fiziksel bağlantısı kesilmişse | 
 | 
HDMI dışı bağlantılarla ilgili dikkat edilmesi gereken noktalar
Android TV yalnızca aşağıdaki çözünürlükleri destekler:
- 720x1280
- 1080x1920
- 2160x3840
- 4320x7680
Bir STB veya TV dongle'ı, CVBS bağlantısı üzerinden 480i gibi desteklenmeyen bir çözünürlüğü görüntülemeye çalıştığında kullanıcıya bir hata mesajı gösterilir.
STB veya TV dongle'ında hem HDMI hem de HDMI olmayan bağlantılar varsa HDMI bağlantısı birincil ekran, HDMI olmayan bağlantı ise etkin değildir. Sonuç olarak, HDMI dışı bağlantı hala bağlıyken HDMI bağlantısı kesilirse SurfaceFlinger'a bir etkinlik gönderilir ve HDMI dışı ekranın özellikleri getDisplayAttribute ve diğer IComposerClient API'leri (ör. getHdrCapabilities) aracılığıyla yansıtılmalıdır.
Yarış durumlarını önlemek için sıralı yapılandırma kimlikleri kullanma
Composer HAL, desteklenen ekran yapılandırmalarını setActiveConfig veya setActiveConfigWithConstraints çağıran çerçeveyle eşzamanlı olarak güncellerse yarış koşulları ortaya çıkabilir. Bu sorunu önlemek için çözüm, sıralı kimlikler kullanmak üzere Composer HAL'i uygulamaktır.
Bu bölümde, yarış koşullarının nasıl oluşabileceği açıklanmakta ve ardından bu koşulları önlemek için sıralı kimlikler kullanacak şekilde Composer HAL'nin nasıl uygulanacağıyla ilgili ayrıntılar verilmektedir.
Yeni sıralı kimlikler yeni görüntülü reklam yapılandırmalarına ATANMADIĞINDA yarış durumu oluşmasına neden olan aşağıdaki etkinlik sırasını göz önünde bulundurun:
- Desteklenen ekran yapılandırması kimlikleri şunlardır: - id=1, 1080x1920 60 Hz
- id=2, 1080x1920 50 Hz
 
- Çerçeve, - setActiveConfig(display, config=1)işlevini çağırır.
- Aynı anda, Composer HAL, ekran yapılandırmalarındaki bir değişikliği işler ve dahili durumunu aşağıdaki gibi gösterilen yeni bir ekran yapılandırmaları grubuyla günceller: - id=1, 2160x3840 60 Hz
- id=2, 2160x3840 50 Hz
- id=3, 1080x1920 60 Hz
- id=4, 1080x1920 50 Hz
 
- Composer HAL, desteklenen modlar kümesinin değiştiğini bildirmek için çerçeveye bir - onHotplugetkinliği gönderir.
- Composer HAL, - setActiveConfig(display, config=1)(2. adımdan) değerini alır.
- HAL, 1080x1920 60 Hz seçilmiş olmasına rağmen çerçevenin 2160x3840 60 Hz için yapılandırma değişikliği istediğini yorumluyor. 
Sıralı olmayan kimlik atamalarının kullanıldığı süreç, seçilen yapılandırma değişikliğinin yanlış yorumlanmasıyla burada sona erer.
Composer HAL'ı sıralı kimlikleri kullanacak şekilde yapılandırma
Bu tür rekabet durumlarını önlemek için OEM, Composer HAL'yi aşağıdaki şekilde uygulamalıdır:
- Composer HAL, desteklenen ekran yapılandırmalarını güncellediğinde yeni ekran yapılandırmalarına yeni ve sıralı kimlikler atar.
- Çerçeve, geçersiz bir yapılandırma kimliğiyle setActiveConfigveyasetActiveConfigWithConstraintsişlevini çağırdığında Composer HAL, çağrıyı yoksayar.
Bu adımlar, aşağıdaki tartışmada gösterildiği gibi yarış koşullarını önlemeye yardımcı olur.
Yeni sıralı kimlikler yeni reklam yapılandırmalarına atandığında aşağıdaki etkinlik sırasını göz önünde bulundurun:
- Desteklenen ekran yapılandırması kimlikleri şunlardır: - id=1, 1080x1920 60 Hz
- id=2, 1080x1920 50 Hz
 
- Çerçeve, - setActiveConfig(display, config=1)işlevini çağırır.
- Görüntü yapılandırmalarında değişiklik işlendiğinde, bir sonraki kullanılmayan tam sayıdan başlayarak aşağıdaki gibi bir sonraki yapılandırma kimlikleri grubu atanır: - id=3, 2160x3840 60 Hz 
- id=4, 2160x3840 50 Hz 
- id=5, 1080x1920 60 Hz 
- id=6, 1080x1920 50 Hz 
 
- Composer HAL, desteklenen modlar kümesinin değiştiğini bildirmek için çerçeveye bir - onHotplugetkinliği gönderir.
- Composer HAL, - setActiveConfig(display, config=1)(2. adımdan) değerini alır.
- ID artık geçerli olmadığından Composer HAL, aramayı yoksayar. 
- Çerçeve, 4. adımdaki - onHotplugetkinliğini alır ve işler.- getDisplayConfigsve- getDisplayAttributeişlevlerini kullanarak Composer HAL'i çağırır. Bu işlevlerle çerçeve, 1080x1920 çözünürlük ve 60 Hz yenileme hızı için yeni kimliği (5) tanımlar.
- Çerçeve, güncellenmiş kimliği 5 olan başka bir - setActiveConfigetkinliği gönderir.
- Composer HAL, 5. adımdan - setActiveConfig(display, config=5)alır.
- HAL, çerçevenin 1080x1920 60 Hz'lik bir yapılandırma değişikliği istediğini doğru şekilde yorumlar. 
Önceki örnekte gösterildiği gibi, sıralı kimlik atamalarını kullanan işlem, yarış durumunun önlendiğini ve doğru ekran yapılandırması değişikliğinin güncellendiğini doğrular.
