Android 11, birden fazla yenileme hızı olan cihazlar için destek ekler. Her biri 100'den az gösterim alan üç ana bileşeni var:
- Yeni HAL API'leri
android.hardware.graphics.composer@2.4
- Cihaz yapılandırmalarını farklı yenileme hızlarına ve İstenen yenileme hızını ayarlayın
- Uygulamaların istedikleri kare hızını ayarlamasına olanak tanıyan yeni SDK ve NDK API'leri
Uygulama
android.hardware.graphics.composer@2.4 HAL
'e yenileme hızı değiştirmeye özel destek eklendi.
Önceki sürümlerinden itibaren bu sürümü kullanmanızı öneririz:
oluşturucu HAL'si, yenileme hızı arasında geçiş yapmak için sınırlı destek sunar.
Yapılandırma grupları
IComposerClient::Attribute
alanına, getDisplayAttribute_2_4
API kullanılarak sorgulanabilir yeni bir CONFIG_GROUP
özelliği eklendi. Bu özellik, tedarikçilerin
yapılandırmalarına yardımcı olur. Aynı gruptaki yapılandırmalar, çoğu durumda bunlar arasında sorunsuz geçiş yapmanıza olanak tanır. Yapılandırma grubu, platform tarafından bir yapılandırma için diğer özellikleri değil de yenileme hızını değiştirmek amacıyla hangi yapılandırmalar arasında geçiş yapılabileceğini belirlemek için kullanılır.
Yapılandırma kullanmanın avantajlarını gösteren aşağıdaki örneği düşünün dört ekran yapılandırmasını destekleyen bir cihaza sahip gruplar:
- 60 Hz'de 1080p
- 1.080p, 90 Hz'de
- 1080i, 72 Hz
- 48 Hz'de 1080i
Cihaz 48 Hz, 60 Hz, 72 Hz ve 90 Hz yenileme hızlarını desteklese de ekran farklı bir modda çalışır ve 60 Hz'den 72 Hz'ye geçiş yapıldığında ekran yapılandırması 1080p'den 1080i'ye değişir. Bu, istenen davranış olmayabilir. Bu sorun, yapılandırma grupları kullanılarak çözülür. 60 Hz ve 90 Hz'i bir yapılandırma grubunda, 48 Hz ve 72 Hz'i ise başka bir yapılandırma grubunda gruplandırarak. Platformun da bu işi 60 Hz ile 90 Hz ve 48 Hz ile 72 Hz arasında geçiş yapabilir ancak 60 Hz ve 72 Hz olarak ayarlanır. Bu işlem, yalnızca değiştirmek yerine yapılandırma değişikliğine neden olur. yenileme hızını artırır.


Composer API güncellemeleri
- getDisplayVsyncPeriod
- Yenileme hızlarını değiştirirken daha iyi kontrol ve öngörülebilirlik için
getDisplayVsyncPeriod
eklendi.getDisplayVsyncPeriod
, ekranın çalıştığı geçerli yenileme hızını (vsync dönemi Bu, özellikle de yenileme hızı ile mevcut yenileme hızı arasında geçiş yapılmasını sağlamak için sonraki karenin ne zaman başlatılacağına karar vermek için platform oluşturun. - setActiveConfigWithConstraints
setActiveConfigWithConstraints
Yöntemi yeni bir uzantıdırsetActiveConfig
yöntemi ile daha uyumlu yapılandırma değişikliği hakkında bilgi edinin. KısıtlamalarvsyncPeriodChangeConstraints
parametreleri ve şunları içeren: parametreleridir.- desiredTimeNanos
CLOCK_MONOTONIC
bölgesinde vsync döneminin gerçekleşebileceği süre (vsync dönemi, bu tarihten önce değişmemelidir). Bu, platformun yenileme hızı değişikliği için önceden plan yapmak istediği ancak sırada sunulacak bazı arabellekleri olduğunda faydalıdır. Platform bu tamponları hesaba katacak şekilde bu zamanı da belirler ve yenileme hızı geçişi olabildiğince akıcı olacak.- seamlessRequired
- True (doğru) ise vsync dönemi değişikliğinin sorunsuz bir şekilde gerçekleşmesi gerekir
RACI matrisini
elinizin altında bulundurun. Bu işaret, içerik değişikliği sonucunda yenileme hızı değişikliği gerektiğinde (örneğin, cihaz boştayken animasyon başladığında) platform tarafından kullanılır. Bu sayede tedarikçi firma, belirgin bir görsel kusur oluşturabilecek belirli yapılandırma değişikliklerine izin vermeyebilir. Yapılandırmalar sorunsuz bir şekilde değiştirilemiyorsa ve
seamlessRequired
true
olarak ayarlanmışsa uygulamanın, döndürülen kod olarakSEAMLESS_NOT_POSSIBLE
döndürmesi ve aynı yapılandırma değişikliği sorunsuz bir şekilde yapılabildiğinde yenionSeamlessPossible
geri çağırma işlevini çağırması beklenir. Başarılı olursa, uygulama bir
VsyncPeriodChangeTimeline
, platforma ne zaman gerçekleşeceğini bildirir yenilenme hızı değişimine yol açacak.newVsyncAppliedTimeNanos
parametrelerinin, yeni ekranın yeni vsync döneminde yenilenmeye başlayacağıCLOCK_MONOTONIC
zamanına ayarlanması gerekir. Bu,desiredTimeNanos
ile birlikte platformun yenileme hızı geçişini önceden planlamasına ve uygulamaları yeni yenileme hızı için önceden işaretlemeye başlamasına olanak tanır. Bu, yenileme hızının sorunsuz bir şekilde geçiş yapmasını sağlar.Bazı uygulamalar, yenilemeden önce yenileme çerçevesi gönderilmesini gerektirir gönderilebileceğini görebilirsiniz. Bunun için HAL'de, yenileme çerçevesine ihtiyaç duyulduğunu belirten
refreshRequired
parametresi ve yenileme çerçevesinin gönderilmesi gereken ilk vsync'i belirtenrefreshTimeNanos
parametresi bulunur.- onVsyncPeriodTimingChanged [callback]
- Platforma zaman çizelgesinin bazı parametrelerinin değiştiğini ve zaman çizelgesini ayarlaması gerektiğini belirtmek için HAL tarafından çağrılabilecek yeni bir geri çağırma işlevi. HAL'deki uzun işlem süresi veya geç bir yenileme çerçevesi nedeniyle eski zaman çizelgesi herhangi bir nedenle kaçırıldıysa bu geri çağırma işlevinin çağrılması beklenir.
Platform, yenileme hızını değiştirmeye nasıl karar verir?
Yenileme hızı seçimi aşağıdaki iki sistem hizmetinde gerçekleşir:
- DisplayManager
DisplayManager
, yenileme hızı ile ilgili üst düzey politikayı belirler. Besteci HAL yapılandırmasıyla aynı olan varsayılan bir görüntüleme yapılandırması belirler. Ayrıca,SurfaceFlinger
için yenileme hızı olarak seçebileceği minimum ve maksimum değer aralığını belirler.- SurfaceFlinger
- Aynı yapılandırmadaki bir yapılandırmayı ayarlayarak yenileme hızını belirler grubunu varsayılan yapılandırma olarak belirleyin ve min/maks. dahilinde bir yenileme hızına sahip aralığı.
Görüntülü Reklam Yöneticisi, politikayı belirlemek için aşağıdaki adımları uygular:
SurfaceFlinger
kaynağından etkin yapılandırmayı sorgulayarak varsayılan yapılandırma kimliğini bulur- Şunun üzerinden yineleme yaparak minimum ve maksimum değer aralığını kısıtlama
sistem koşulları
- Varsayılan yenileme hızı ayarı: Varsayılan yenileme hızı değeri
R.integer.config_defaultRefreshRate
yapılandırma yer paylaşımında ayarlandı. Bu değer, animasyonlar ve dokunma etkileşimleri için standart cihaz yenileme hızını belirlemek amacıyla kullanılır. - En yüksek yenileme hızı ayarı: En yüksek yenileme hızı değeri
Settings.System.PEAK_REFRESH_RATE
değerinden okunur. Bu değer, mevcut cihaz ayarını yansıtacak şekilde çalışma zamanında değiştirilir (ör. bir menü seçeneğinden). Varsayılan değer,R.integer.config_defaultPeakRefreshRate
yapılandırma yer paylaşımında ayarlanır. - Minimum yenileme hızı ayarı: Minimum yenileme hızı
değer
Settings.System.MIN_REFRESH_RATE
değerinden okunur. Bu değer, geçerli cihaz ayarını yansıtacak şekilde (örneğin, (seçenek) seçeneğini belirleyin. Varsayılan değer 0 olduğundan varsayılan minimum değer yoktur. - Uygulama tarafından istenen ModeId: Uygulamalar,
WindowManager.LayoutParams.preferredDisplayModeId
değerini ekranın çalışması gereken tercih edilen yapılandırmayı yansıtacak şekilde ayarlayabilir. Çoğu durumdaDisplayManager
, varsayılan yapılandırma kimliğini buna göre ayarlar ve minimum ile maksimum yenileme hızını, yapılandırmanın yenileme hızıyla eşleşecek şekilde ayarlar. - Pil Tasarrufu: Cihaz düşük güç modundayken yenileme hızı 60 Hz veya daha düşük bir değerle sınırlandırılır. Bu durum
Settings.Global.LOW_POWER_MODE.
simgesiyle gösterilir.
- Varsayılan yenileme hızı ayarı: Varsayılan yenileme hızı değeri
DisplayManager
, politikayı belirledikten sonra
SurfaceFlinger
, yenileme hızını etkin katmanlara (sıradaki katmanlar) göre ayarlar
çerçeve güncellemeleri) girin. Katmanın sahibi bir kare hızı ayarlarsa SurfaceFlinger, yenileme hızını bu hızın çarpanı olan bir değere ayarlamayı dener.
Örneğin, iki etkin katman kare hızını 24 ve 60 olarak ayarlarsa SurfaceFlinger, mevcutsa 120 Hz'i seçer. SurfaceFlinger bu tür bir yenileme hızını kullanamıyorsa kare hızı için en az hataya sahip yenileme hızını seçmeye çalışır. Daha fazla bilgi için developer.android.com adresindeki geliştirici belgelerini inceleyin.
SurfaceFlinger
, yenileme hızının nasıl belirleneceğini kontrol etmek için aşağıdaki işaretçileri korur:
ro.surface_flinger.use_content_detection_for_refresh_rate:
Ayarlanırsa kare hızı ayarlanmasa bile yenileme hızına etkin katmanlara göre karar verilir. SurfaceFlinger, arabelleğe eklenen sunma zaman damgasına bakarak katmanın yayınladığı arabellekleri ortalama kare hızını bulduğu bir sezgisel yöntem kullanır.ro.surface_flinger.set_touch_timer_ms
: > 0, varsayılan değer Yenileme hızı, kullanıcı yapılandırılmış sürüm için ekrana dokunduğunda kullanılır zaman aşımına uğrar. Bu sezgisel yaklaşım, animasyonlar için varsayılan yenileme hızıyla hazır olmak amacıyla yapılır.ro.surface_flinger.set_idle_timer_ms
: > 0, minimum yenileme hızı , yapılandırılan zaman aşımı için herhangi bir ekran güncellemesi olmadığında kullanılır.ro.surface_flinger.set_display_power_timer_ms
: > 0, açılırken (veya ekran açılırken) varsayılan yenileme hızı AOD dışında) görürsünüz.
Kare Hızı API'si
Kare hızı API'si, uygulamaların Android platformunu hedefledikleri kare hızıyla ilgili bilgilendirmesine olanak tanır ve Android 11'i hedefleyen uygulamalarda kullanılabilir. Şu konu hakkında daha fazla bilgi edinmek için: hakkında daha fazla bilgi edinmek istiyorsanız developer.android.com adresindeki geliştirici belgelerini inceleyin.
Geliştirici seçenekleri

Yer paylaşımını açık konuma getiren menüye yeni bir geliştirici seçeneği eklendi ekranda geçerli yenileme hızıyla gösterilir. Yeni seçenek Ayarlar > Sistem > Geliştirici seçenekler > Yenileme hızını göster.