Etkinlik durumu değişiklikleri

Bazıları kullanıcı tarafından, bazıları ise sistem tarafından tetiklenen farklı etkinlikler, Activity'ın bir durumdan diğerine geçmesine neden olabilir. Bu belgede, bu tür geçişlerin gerçekleştiği bazı yaygın durumlar ve bu geçişlerin nasıl ele alınacağı açıklanmaktadır.

Etkinlik durumları hakkında daha fazla bilgi için Etkinlik yaşam döngüsü başlıklı makaleyi inceleyin. ViewModel sınıfının etkinlik yaşam döngüsünü yönetmenize nasıl yardımcı olabileceği hakkında bilgi edinmek için ViewModel'e genel bakış başlıklı makaleyi inceleyin.

Çoğu etkinlik değişikliği için etkinlik yaşam döngüsündeki geri çağırmalara doğrudan yanıt vermeniz gerekmez. Compose, kullanıcı arayüzlerini durumdan yeniden oluşturduğundan, durumu rememberSaveable veya ViewModel gibi uygun bir yerde saklayarak otomatik yeniden oluşturmadan yararlanabilirsiniz.

Yapılandırma değişikliği gerçekleştiğinde

Yapılandırma değişikliğini tetikleyebilecek çeşitli etkinlikler vardır. Belki de en belirgin örnek, dikey ve yatay yönlendirmeler arasındaki değişikliktir. Yapılandırma değişikliklerine neden olabilecek diğer durumlar arasında dil ayarlarında veya giriş cihazında yapılan değişiklikler yer alır.

Yapılandırma değişikliği olduğunda etkinlik yok edilir ve yeniden oluşturulur. Bu işlem, orijinal etkinlik örneğinde aşağıdaki geri çağırma işlevlerini tetikler:

  1. onPause
  2. onStop
  3. onDestroy

Etkinliğin yeni bir örneği oluşturulur ve aşağıdaki geri çağırmalar tetiklenir:

  1. onCreate
  2. onStart
  3. onResume

Compose'da bu geri çağırmalarla doğrudan etkileşimde bulunmak normal değildir. Bunun yerine, durum değişikliklerini gözlemlemek için Lifecycle API'yi kullanın. Oluşturma işleminde, geçerli yaşam döngüsünü almak ve bir gözlemci eklemek için LocalLifecycleOwner.current kullanabilirsiniz. Böylece etkinliklere yanıt verebilirsiniz.

Bir etkinliğin kullanıcı arayüzü durumunu yapılandırma değişikliklerinde korumak için ViewModel örnekleri, rememberSaveable veya kalıcı yerel depolama alanının bir kombinasyonunu kullanın. Bu seçenekleri nasıl birleştireceğinize karar verirken kullanıcı arayüzü verilerinizin karmaşıklığı, uygulamanızın kullanım alanları ve alma hızı ile bellek kullanımı arasındaki dengeyi göz önünde bulundurmanız gerekir. Çoğu kullanım alanında, durumu bir ViewModel içine taşımanız ve hem yapılandırma değişiklikleri hem de sistem tarafından başlatılan işlem sonlandırma sırasında durumun kalıcı olmasını sağlamak için rememberSaveable kullanmanız gerekir. Etkinlik kullanıcı arayüzü durumunuzu kaydetme hakkında daha fazla bilgi için Kullanıcı arayüzü durumlarını kaydetme başlıklı makaleyi inceleyin.

Bir etkinlik, yapılandırma değişikliği nedeniyle yeniden oluşturulduğunda ilk kompozisyon kaldırılır. ViewModel veya rememberSaveable kullanmak, kullanıcı arayüzü durumunuzun yeni kompozisyonda geri yüklenmesini sağlar.

Daha fazla bilgi için Lifecycle in Jetpack Compose (Jetpack Compose'da yaşam döngüsü) ve State and Jetpack Compose (Durum ve Jetpack Compose) başlıklı makaleleri inceleyin.

Çoklu pencere durumlarını işleme

Android 7.0 (API düzeyi 24) ve sonraki sürümlerde kullanılabilen çok pencereli moda giren bir uygulama olduğunda sistem, çalışan etkinliği yapılandırma değişikliği konusunda bilgilendirir. Böylece, daha önce açıklanan yaşam döngüsü geçişleri gerçekleşir.

Bu davranış, çoklu pencere modunda olan bir uygulamanın yeniden boyutlandırılması durumunda da görülür. Etkinliğiniz yapılandırma değişikliğini kendisi işleyebilir veya sistemin etkinliği yok edip yeni boyutlarla yeniden oluşturmasına izin verebilir.

Çoklu pencere yaşam döngüsü hakkında daha fazla bilgi için Çoklu pencere modunu destekleme bölümündeki çoklu pencere yaşam döngüsü ile ilgili açıklamaya bakın.

Çok pencereli modda, kullanıcıya iki uygulama görünse de yalnızca kullanıcının etkileşimde bulunduğu uygulama ön plandadır ve odaklanılmıştır. Bu etkinlik Devam Ediyor durumundayken diğer penceredeki uygulama Duraklatıldı durumundadır.

Kullanıcı A uygulamasından B uygulamasına geçtiğinde sistem, A uygulamasında onPause, B uygulamasında ise onResume işlevini çağırır. Kullanıcı uygulamalar arasında geçiş yaptığında bu iki yöntem arasında geçiş yapılır.

Çoklu pencere modu hakkında daha fazla bilgi için Çoklu pencere modunu destekleme başlıklı makaleyi inceleyin.

Ön planda etkinlik veya iletişim kutusu görünür

Ön planda yeni bir etkinlik veya iletişim kutusu görünürse, odaklanarak devam eden etkinliği kısmen kaplar. Bu durumda, kaplanan etkinlik odağını kaybeder ve Duraklatıldı durumuna geçer. Ardından sistem, onPause işlevini çağırır.

Kapsanan etkinlik ön plana döndüğünde ve odağı yeniden kazandığında sistem onResume işlevini çağırır.

Ön planda yeni bir etkinlik veya iletişim kutusu görünürse, odaklanarak devam eden etkinliği tamamen kaplar. Bu durumda, kaplanan etkinlik odağını kaybeder ve Durduruldu durumuna girer. Sistem daha sonra hızlı bir şekilde onPause ve onStop işlevlerini çağırır.

Kapsanan etkinliğin aynı örneği ön plana döndüğünde sistem, etkinlik üzerinde onRestart, onStart ve onResume yöntemlerini çağırır. Arka plana gelen, kapsanan etkinliğin yeni bir örneğiyse sistem yalnızca onStart ve onResume yöntemlerini çağırır, onRestart yöntemini çağırmaz.

Yeniden oluşturma, ön planda görünen iletişim kutularından etkilenmez. Ancak yaşam döngüsüyle ilişkili yan etkiler (ör. akışlar ve animasyonlar), gerektiğinde çalışmayı otomatik olarak duraklatıp devam ettirmek için yaşam döngüsüne duyarlı API'ler (ör. collectAsStateWithLifecycle) kullanmalıdır. Daha fazla bilgi için State ve Jetpack Compose başlıklı makaleyi inceleyin.

Kullanıcı Geri'ye dokunduğunda veya geri hareketi yaptığında

Bir etkinlik ön plandaysa ve kullanıcı Geri'ye dokunur ya da geri hareketini yaparsa etkinlik, onPause, onStop ve onDestroy geri çağırmaları arasında geçiş yapar. Etkinlik yok edilir ve geri yığından kaldırılır.

Çoğu Compose uygulamasında olduğu gibi tek etkinlikli bir uygulamada, composable gezinme geri yığınından kaldırılırsa rememberSaveable durumu korumaz. Bunun nedeni, kullanıcı Geri'ye dokunduğunda aynı örneğe geri dönmesinin beklenmemesi ve bu nedenle tüm durumun temizlenmesidir.

Kullanıcıdan uygulamanızdan çıkmak istediğini onaylamasını isteyen bir iletişim kutusu gösterme gibi özel geri davranışını uygulamak için NavigationEventHandler API'sini kullanın.

Sistem, uygulama sürecini sonlandırıyor

Bir uygulama arka planda çalışıyorsa ve sistemin ön planda çalışan bir uygulama için belleği boşaltması gerekiyorsa sistem, arka plandaki uygulamayı kapatabilir. Sistem bir uygulamayı kapattığında uygulamada onDestroy işlevinin çağrılacağı garanti edilmez.

Sistemin hangi işlemleri sonlandıracağına nasıl karar verdiği hakkında daha fazla bilgi edinmek için Etkinlik durumu ve bellekten çıkarma ile İşlemler ve uygulama yaşam döngüsü başlıklı makaleleri inceleyin.

Sistem, uygulama işleminizi sonlandırdığında etkinliğinizin kullanıcı arayüzü durumunu nasıl kaydedeceğinizi öğrenmek için Geçici kullanıcı arayüzü durumunu kaydetme ve geri yükleme başlıklı makaleyi inceleyin.