Android 9 ve önceki sürümlerde uygulamalar şu durumlarda PAUSED
durumuna girildi:
- Uygulama hâlâ görünür durumdayken uygulamanın üst kısmında yeni, yarı saydam bir etkinlik başlatıldı (ve bu nedenle durdurulmadı).
- Etkinliğe odaklanıldı ancak gizlenmedi ve kullanıcı tarafından etkileşimde bulunulabilirdi. Örneğin, Örneğin, çoklu pencere modunda bir dizi etkinlik görülebilir ve dokunmatik giriş alabilir. olanak tanır.
Bu durumlar, bir uygulamanın yapması gereken duraklatma miktarı açısından farklılık gösterir ancak uygulama düzeyinde ayırt edilir.
Android 10'da, görünür gruplardaki en iyi odaklanılabilen tüm etkinlikler
RESUMED
durumu. Bu işlem,
Çoklu Pencere ve MD modları,
Kullanıcı arayüzünü yenilemeyi ve etkileşimi durdurmak için onStop()
yerine onPause()
gösterme fırsatı sunar. Bunun anlamı şudur:
- Bölünmüş ekrandaki her iki etkinlik de devam ettirilir.
- Serbest biçimli pencere modunda en üstte görünen tüm etkinlikler devam ettirilir.
- Birden fazla ekrandaki etkinlikler aynı anda devam ettirilebilir.
Şekil 1. Katlanabilir cihazda çoklu devam ettirme
Şekil 2. Masaüstü modunda çoklu devam ettirme
Etkinlikler, odaklanılamayan veya odaklanılamayan PAUSED
durumunda olabilir
kısmen örtülmüş, örneğin:
- Küçültülmüş bölünmüş ekranda (Başlatıcı yan taraftadır) en önemli etkinlik odaklanılamaz.
- Pencere içinde pencere modunda ise odaklama olmadığından etkinlik devam ettirilmez.
- Etkinlikler, aynı yığındaki diğer şeffaf etkinliklerin kapsamında olduğunda.
Bu yaklaşım, uygulamaların bir etkinlikten girdi alabileceğini
yalnızca RESUMED
durumunda olan kullanıcılar. Android 10'dan önce
etkinlikler de PAUSED
durumunda girişler alabilir (örneğin,
her iki işlem de Android 9 çalıştıran bir cihazda aynı anda bölünmüş ekranda).
Önceki Android sürümlerinden devam ettirilen sinyali korumak (ve uygulamaların ne zaman özel erişim veya tekil erişim elde etmesi gerektiği ile ilgili iletişim kurmak için kaynaklar), Android 10 yeni bir geri çağırma içeriyor:
Activity#onTopResumedActivityChanged(boolean onTop)
Bu geri çağırma, çağrıldığında Activity#onResume()
arasında çağrılır
ve Activity#onPause()
. Bu geri çağırma isteğe bağlıdır ve atlanabilir.
Böylece, etkinlik RESUMED
durumundan PAUSED
durumuna geçebilir
ve sistemin en üstünde yer almıyor. Örneğin, çoklu pencere modunda.
Bu geri çağırma isteğe bağlı olduğundan, Etkinlik
Yaşam döngüsü boyunca geçerlidir ve nadiren kullanılmalıdır.
Önceki en çok devam ettirilen etkinlik, şu öğenin yürütülmesini alır ve bitirir:
Bir sonraki en çok devam ettirilen etkinlikten onTopResumedActivity(false)
önce
önceki etkinlik gerçekleşmediği takdirde onTopResumedActivity(true)
alır
yöntem çağrısının işlenmesi çok fazla zaman alır ve 500 ms zaman aşımına uğrar.
Uyumluluk
Çoklu devam ettirmeyi uygularken uyumluluğu korumak için şunları göz önünde bulundurun: çözümler.
Tek bir uygulama işleminde devam eden birden çok etkinlik
- Sorun. Android 9 ve önceki sürümlerde sistemde yalnızca bir etkinlik vardır. her seferinde devam ettirilir. Etkinlikler arasındaki tüm geçişler, etkinliği devam ettirin. Bazı uygulamalar ve çerçeveler (ör. Flutter veya (ör. Android'in LocalActivityManager) bileşeni) bu bilgiyi kullanır ve devam ettirilen teklilerdeki etkinliktir.
- Çözüm. Android 9 ve önceki sürümlerde aynı süreçten iki etkinlik varsa devam ettirildiğinde, sistem yalnızca Z sırasına göre daha yüksek olan etkinliği devam ettirir. Android 10'u hedefleyen uygulamalar birden fazla etkinliği destekleyebilir aynı anda devam ettiriliyor.
Eş zamanlı kamera erişimi
- Sorunlar. Bu sorunlar ayrıca Android 9 ve
daha düşük. Örneğin, tam ekran ve devam ettirilen bir etkinlik kameranın odağını bir
en üstünde duraklatılmış bir etkinlik ancak pencere içinde pencere modunda
çok pencereli ve çoklu ekran modlarının daha fazla benimsenmesi.
RESUME
durumunda yapılan değişiklikler nedeniyle uygulamalar devam ettirilmiş olsa bile kamerayla bağlantısı kesildi. Bu sorunu gidermek için kameranın kesilmesi gerekir, ancak bu işlem arka plandadır. Bağlantı kesildiğinde, uygulamalar bir bağlantısı kesilmiş geri çağırma ve API'ye yapılan tüm çağrılarCameraAccessException
resizeableActivity=false
, özel kamera garantisi değildir erişimi olduğundan emin olun. Çünkü kamerayı kullanan diğer uygulamalar diğer ekranlarda açılabiliyor.
- Çözümler. Geliştiriciler, uygulama yüklemelerinde
kamerayla bağlantısı kesildi. Bir uygulamanın kamerayla bağlantısı kesilirse
yeniden bağlanmayı ve devam etmeyi denemek için kamera kullanılabilirliği geri çağırmalarını izlemelisiniz
izin verir. Mevcut
CameraManager#AvailabilityCallback#onCameraAvailable()
geri arama, Android 10 eklendiCameraManager#AvailabilityCallback#onCameraAccessPrioritiesChanged()
, Bu konu, odak (ve kamera önceliği) ile birkaç devam ettirilen etkinlikler. Uygulama geliştiriciler, bu geri çağırmaların her ikisini de kameraya erişmeye çalışmak için iyi bir zaman belirleyin.
Çoklu devam ettirme
Android 10'da etkinlik yaşam döngüsü durumu, görünürlük ve
Z düzeni. Bir
hangi yaşam döngüsü durumunun geçerli olduğunu değerlendirin,
ActivityRecord#makeActiveIfNeeded()
yöntem, farklı
yerler. Android 10'da, "etkin", RESUMED
veya
PAUSED
ve yalnızca bu iki örnekte çalışır.
Android 10'da bir etkinliği devam ettirme işlemi her yığında ayrı ayrı izlenir
tek bir konum yerine otomatik olarak
toplanabilir. Bunun nedeni birkaç
etkinlik geçişleri, çoklu pencere modlarında eş zamanlı olarak gerçekleştirilebilir. Örneğin,
daha fazla bilgi için ActivityStack#mInResumeTopActivity
inceleyin.
En çok devam ettirilen etkinlik geri çağırması
En popüler etkinlik değişikliğine neden olabilecek işlemlerden (ör.
başlatma, devam ettirme veya Z sırası değişimi)
ActivityStackSupervisor#updateTopResumedActivityIfNeeded()
çağrılır. Bu
yöntemi, en sık devam ettirilen etkinliğin değişip değişmediğini kontrol eder ve güncellemeyi
gerekir. Bir önceki en çok devam ettirilen etkinlik en sık devam ettirilen etkinliği yayınlamadıysa
bir en yüksek devam ettirilmiş durum kaybı iletisi gönderilir ve
sunucu tarafında planlanmış
(ActivityStackSupervisor#scheduleTopResumedStateLossTimeout()
).
En çok devam ettirilen durumun raporu, önceki etkinlikten sonra, sonraki etkinliğe gönderilir
durumu serbest bıraktığında veya zaman aşımına uğradığında (şunların kullanımlarına bakın:
ActivityStackSupervisor#scheduleTopResumedActivityStateIfNeeded()
Yeni bir TopResumedActivityChangeItem
işlem öğesi eklendi
en büyük devam ettirilen durum değişikliklerini müşterilere bildirmek için Google
Android 9'dan ActivityLifecycler
mimarisi.
En üst devam ettirilen durum istemci tarafında depolanır ve
etkinlik RESUMED
veya PAUSED
biçimine geçerse
onTopResumedActivityChanged()
geri çağırmasının gerekip gerekmediğini kontrol eder
çağrılır. Bu, yaşam döngüsü durumlarının iletişiminde belirli ayırmaların gerçekleşmesini sağlar.
ve istemci tarafları arasında en yüksek devam ettirilen durum
gibi öğeler içerebilir.