Davranış değişiklikleri: tüm uygulamalar

Android 16 platformunda, uygulamanızı etkileyebilecek davranış değişiklikleri vardır. Aşağıdaki davranış değişiklikleri, targetSdkVersion'ten bağımsız olarak Android 16'da çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeniz ve ardından geçerli olduğu durumlarda bu değişiklikleri desteklemek için gerektiği gibi değiştirmeniz gerekir.

Yalnızca Android 16'yı hedefleyen uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.

Temel işlevler

Android 16, Android sisteminin çeşitli temel özelliklerini değiştiren veya genişleten aşağıdaki değişiklikleri içerir.

JobScheduler kota optimizasyonları

Android 16'dan itibaren, normal ve hızlandırılmış iş yürütme çalışma süresi kotasını aşağıdaki faktörlere göre ayarlıyoruz:

  • Uygulamanın bulunduğu uygulama bekleme havuzu: Android 16'da, etkin bekleme havuzları geniş bir çalışma süresi kotasıyla uygulanmaya başlayacaktır.
  • İş, uygulama üst durumdayken çalışmaya başlarsa: Android 16'da, uygulama kullanıcı tarafından görünür durumdayken başlatılan ve uygulama görünmez hale geldikten sonra devam eden işler, iş çalışma süresi kotasına uyar.
  • İş, bir ön plan hizmeti çalışırken yürütülüyorsa: Android 16'da, bir ön plan hizmetiyle eşzamanlı olarak yürütülen işler iş çalışma süresi kotasına uyar. Kullanıcı tarafından başlatılan veri aktarımı için işlerden yararlanıyorsanız bunun yerine kullanıcı tarafından başlatılan veri aktarım işlerini kullanmayı düşünebilirsiniz.

Bu değişiklik, WorkManager, JobScheduler ve DownloadManager kullanılarak planlanan görevleri etkiler. Bir işin neden durdurulduğunu hata ayıklamak için WorkInfo.getStopReason()'u çağırarak işinizin neden durdurulduğunu kaydetmenizi öneririz (JobScheduler işleri için JobParameters.getStopReason()'i çağırın).

Pil kullanımı için en iyi uygulamalar hakkında daha fazla bilgi edinmek isterseniz görev planlama API'leri için pil kullanımını optimize etme konulu makaleyi inceleyin.

Ayrıca, bir işin neden yürütülmediğini anlamak için Android 16'da kullanıma sunulan yeni JobScheduler#getPendingJobReasonsHistory API'den yararlanmanızı öneririz.

Test

Uygulamanızın davranışını test etmek için uygulama Android 16 cihazda çalışıyorsa belirli iş kotası optimizasyonlarının geçersiz kılınmasını etkinleştirebilirsiniz.

"Üst durum, iş çalışma zamanı kotasına uyar" yaptırımını devre dışı bırakmak için aşağıdaki adb komutunu çalıştırın:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

"Ön plan hizmetiyle eşzamanlı olarak yürütülen işler, iş çalışma süresi kotasına uymalıdır" kuralının uygulanmasını devre dışı bırakmak için aşağıdaki adb komutunu çalıştırın:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

Belirli uygulama bekleme grubu davranışlarını test etmek için aşağıdaki adb komutunu kullanarak uygulamanızın uygulama bekleme grubunu ayarlayabilirsiniz:

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

Uygulamanızın bulunduğu uygulama bekleme grubunu anlamak için aşağıdaki adb komutunu kullanarak uygulamanızın uygulama bekleme grubunu alabilirsiniz:

adb shell am get-standby-bucket APP_PACKAGE_NAME

JobInfo#setImportantWhileForeground desteğinin tamamen sonlandırılması

JobInfo.Builder#setImportantWhileForeground(boolean) yöntemi, planlama uygulaması ön plandayken veya geçici olarak arka plan kısıtlamalarından muafken bir işin önemini belirtir.

Bu yöntem, Android 12 (API düzeyi 31) sürümünden itibaren kullanımdan kaldırılmıştır. Android 16'dan itibaren bu yöntem artık etkili bir şekilde çalışmaz ve bu yöntem çağrılırsa yoksayılır.

Bu işlev kaldırma işlemi JobInfo#isImportantWhileForeground() için de geçerlidir. Android 16'dan itibaren, yöntem çağrılırsa false döndürülür.

Sıralı yayın önceliği kapsamı artık global değil

Android uygulamalarının, alıcılara yayını alma ve işleme sırasını kontrol etmek için yayın alıcılarında öncelikleri tanımlamasına izin verilir. Manifestte tanımlanan alıcılarda uygulamalar önceliği tanımlamak için android:priority özelliğini, bağlamda kaydedilen alıcılarda ise IntentFilter#setPriority() API'yi kullanabilir. Bir yayın gönderildiğinde sistem, yayını öncelik sırasına göre (en yüksekten en düşüğe) alıcılara iletir.

Android 16'da, farklı işlemlerde android:priority özelliğini veya IntentFilter#setPriority() değerini kullanan yayın sırası garanti edilmez. Yayın önceliklerine tüm süreçlerde değil, yalnızca aynı başvuru sürecinde uyulur.

Ayrıca yayın öncelikleri otomatik olarak (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1) aralığına sınırlandırılır. Yalnızca sistem bileşenlerinin SYSTEM_LOW_PRIORITY, SYSTEM_HIGH_PRIORITY'ü yayın önceliği olarak ayarlamasına izin verilir.

Uygulamanız aşağıdakilerden birini yapıyorsa bu durumdan etkilenebilir:

  1. Uygulamanız aynı yayın intent'iyle birden fazla işlem tanımladı ve bu intent'leri önceliğe göre belirli bir sırada alma konusunda beklentileri var.
  2. Başvuru süreciniz diğer süreçlerle etkileşim kurar ve belirli bir sırada yayın amacı almayla ilgili beklentileri vardır.

İşlemlerin birbiriyle koordinasyon kurması gerekiyorsa diğer koordinasyon kanallarını kullanarak iletişim kurmalıdır.

ART'daki dahili değişiklikler

Android 16, Android Runtime'da (ART) performansı artıran ve ek Java özellikleri için destek sağlayan en son güncellemeleri içerir. Google Play sistem güncellemeleri sayesinde bu iyileştirmeler, Android 12 (API düzeyi 31) ve sonraki sürümleri çalıştıran bir milyardan fazla cihazda da kullanılabilir.

Bu değişiklikler kullanıma sunulduğunda, ART'nin dahili yapılarına dayanan kitaplıklar ve uygulama kodları, Android 16 çalıştıran cihazların yanı sıra Google Play sistem güncellemeleri aracılığıyla ART modülünü güncelleyen önceki Android sürümlerinde düzgün çalışmayabilir.

Dahili yapılara (ör. SDK dışı arayüzler) güvenmek her zaman uyumluluk sorunlarına yol açabilir. Ancak ART değişiklikleri cihazın çalıştığı platform sürümüne bağlı olmadığı ve Google Play sistem güncellemeleri aracılığıyla bir milyardan fazla cihaza dağıtıldığı için özellikle dahili ART yapılarından yararlanan koda (veya kod içeren kitaplıklara) güvenmekten kaçınmak önemlidir.

Tüm geliştiriciler, uygulamalarını Android 16'da ayrıntılı bir şekilde test ederek uygulamalarının etkilenip etkilenmediğini kontrol etmelidir. Ayrıca, uygulamanızın dahili ART yapılarına dayalı olarak tespit ettiğimiz kitaplıklara bağımlı olup olmadığını görmek için bilinen sorunları kontrol edin. Etkilenen uygulama kodunuz veya kitaplık bağımlılıklarınız varsa mümkün olduğunda herkese açık API alternatifleri arayın ve sorun takipçimizde özellik isteği oluşturarak yeni kullanım alanları için herkese açık API'ler isteyin.

Kullanıcı deneyimi ve sistem kullanıcı arayüzü

Android 16, daha tutarlı ve sezgisel bir kullanıcı deneyimi sunmak için tasarlanmış aşağıdaki değişiklikleri içerir.

Kullanımı engelleyen erişilebilirlik duyurularının desteği sonlandırılıyor

Android 16, announceForAccessibility kullanımı veya TYPE_ANNOUNCEMENT erişilebilirlik etkinliklerinin gönderilmesiyle karakterize edilen erişilebilirlik duyurularını desteklememektedir. Bu durum, TalkBack ve Android'in ekran okuyucusunun kullanıcıları için tutarsız kullanıcı deneyimleri oluşturabilir. Alternatifler ise Android'in çeşitli yardımcı teknolojileri genelinde daha geniş bir kullanıcı ihtiyacı yelpazesine daha iyi hizmet eder.

Alternatiflere örnekler:

Kullanımdan kaldırılan announceForAccessibility API'nin referans dokümanlarında, önerilen alternatifler hakkında daha fazla bilgi verilmektedir.

3 düğmeli gezinme desteği

Android 16, tahmini geriye doğru geçişi doğru şekilde gerçekleştiren uygulamalarda 3 düğmeli gezinme için tahmini geri desteği sunar. Geri düğmesine uzun bastığınızda tahmini geri animasyonu başlatılır. Bu animasyon, geri kaydırmanın sizi nereye götüreceğinin önizlemesini gösterir.

Bu davranış, sistem animasyonları (ana sayfaya geri gitme, görevler arası ve etkinlikler arası) dahil olmak üzere sistemin tahmine dayalı geri animasyonlarını destekleyen tüm alanlarında geçerlidir.

3 düğmeli gezinme modundaki tahmine dayalı geri hareketi animasyonları.