Etkinlik durumu değişiklikleri

Bazıları kullanıcı tarafından tetiklenen ve bazıları sistem tarafından tetiklenen farklı etkinlikler Activity'in 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ü bölümüne bakın. 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ış bölümüne bakın.

Yapılandırma değişikliği yapıldı

Yapılandırma değişikliğini tetikleyebilecek çeşitli etkinlikler vardır. Belki de en belirgin örnek, dikey ve yatay yönler arasındaki bir değişikliktir. Dil ayarlarında veya giriş cihazında yapılan değişiklikler de yapılandırma değişikliklerine neden olabilir.

Bir yapılandırma değişikliği gerçekleştiğinde etkinlik yok edilir ve yeniden oluşturulur. Bu işlem, orijinal etkinlik örneğinde aşağıdaki geri çağırmaları 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()

Yapılandırma değişiklikleri genelinde bir etkinliğin kullanıcı arayüzü durumunu korumak için ViewModel örnekleri, onSaveInstanceState() yöntemi veya kalıcı yerel depolamanın bir kombinasyonunu kullanın. Bu seçeneklerin nasıl birleştirileceğine karar vermek, kullanıcı arayüzü verilerinizin karmaşıklığına, uygulamanızın kullanım alanlarına ve alma hızının bellek kullanımına kıyasla değerlendirilmesine bağlıdır. Etkinlik kullanıcı arayüzü durumunuzu kaydetme hakkında daha fazla bilgi için Kullanıcı arayüzü durumlarını kaydetme bölümüne bakın.

Birden fazla pencereye sahip durumları ele alın

Bir uygulama, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde bulunan çoklu pencere moduna girdiğinde, sistem bir yapılandırma değişikliğiyle ilgili çalışan etkinliği bildirir. Böylece, daha önce açıklanan yaşam döngüsü geçişlerinden geçer.

Bu davranış, zaten çoklu pencere modunda olan bir uygulama yeniden boyutlandırıldığında da ortaya çıkar. Etkinliğiniz, yapılandırma değişikliğini 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 edinmek için Çoklu pencere desteği sayfasındaki çoklu pencere yaşam döngüsü açıklamasına bakın.

Çoklu pencere modunda, kullanıcının görebildiği iki uygulama olsa da yalnızca kullanıcının etkileşimde bulunduğu uygulama ön planda ve odaktadır. Bu etkinlik Devam ettirildi durumunda, diğer penceredeki uygulama ise 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() numarasını arar. Kullanıcının uygulamalar arasında her geçiş yaptığında bu iki yöntem arasında geçiş yapar.

Çoklu pencere modu hakkında daha fazla bilgi edinmek için Çoklu pencere desteği bölümüne bakın.

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

Ön planda, odaklanılan ve devam eden etkinliği kısmen kaplayan yeni bir etkinlik veya iletişim kutusu görünürse kapsanan etkinlik, odağı kaybeder ve Duraklatıldı durumuna geçer. Ardından, sistem cihazda onPause() numarasını çağırır.

Kapsama dahil olan etkinlik ön plana dönüp yeniden odaklandığında sistem onResume() kodunu çağırır.

Ön planda yeni bir etkinlik veya iletişim kutusu belirirse, odaklanıldığında ve devam eden etkinlik tamamen örtüşürse kapsanan etkinlik odağı kaybeder ve Durduruldu durumuna geçer. Ardından sistem sırayla onPause() ve onStop() numaralarını arar.

Kapsam dahilindeki etkinliğin aynı örneği ön plana döndüğünde, sistem etkinlikte onRestart(), onStart() ve onResume() çağırır. Bu, arka planda gelen kapsam dahilindeki etkinliğin yeni bir örneğiyse sistem onRestart()'i değil, yalnızca onStart() ve onResume()'yi çağırır.

Kullanıcı Geri'ye dokunuyor veya geri hareketi yapıyor

Ön planda bir etkinlik varsa ve kullanıcı Geri'ye dokunursa veya geri hareketi yaparsa bu etkinlik onPause(), onStop() ve onDestroy() geri çağırmaları arasında geçiş yapar. Etkinlik yok edilir ve arka yığından kaldırılır.

Bu durumda varsayılan olarak onSaveInstanceState() geri çağırması etkinleşmez. Bu davranış, kullanıcının aynı etkinlik örneğine dönme beklentisi olmadan Geri'ye dokunduğunu varsayar.

Ancak onBackPressed() yöntemini geçersiz kılarak kullanıcıdan çıkış yapmak istediğini onaylamasını isteyen bir iletişim kutusu görüntüleme gibi özel bir davranış uygulayabilirsiniz.

onBackPressed() yöntemini geçersiz kılarsanız geçersiz kılınan yönteminizden super.onBackPressed() yöntemini yine de çağırmanızı önemle tavsiye ederiz. Aksi takdirde, sistemin Geri davranışı kullanıcıyı rahatsız edebilir.

Sistem, uygulama işlemini sonlandırır

Bir uygulama arka plandaysa ve sistemin ön plan uygulaması için bellekte yer açması gerekiyorsa sistem arka plan uygulamasını kapatabilir. Sistem bir uygulamayı durdurduğunda, uygulamada onDestroy() çağrısının garanti edildiğine dair bir garanti yoktur.

Sistemin hangi işlemlerin kaldırılacağına nasıl karar verdiği hakkında daha fazla bilgi edinmek için Etkinlik durumu ve bellekten çıkarma ve Süreçler ve uygulama yaşam döngüsü bölümlerini okuyun.

Sistem, uygulama işleminizi sonlandırdığında etkinlik kullanıcı arayüzü durumunuzu nasıl kaydedeceğinizi öğrenmek için Geçici kullanıcı arayüzü durumunu kaydetme ve geri yükleme bölümüne bakın.