Çoklu özgeçmiş

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ılar CameraAccessException
    • 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 eklendi CameraManager#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.