Kullanıcı uygulamanızda gezinirken, uygulamanızdan çıkar ve geri dönerken, uygulamanızdaki Activity
örneklerinin yaşam döngüleri içinde farklı durumlardan geçmesi gerekir.
Activity
sınıfı, bir durum değiştiğinde etkinliğe dair bilgi veren, sistemin bir etkinlik oluşturduğunu, durdurduğunu veya devam ettirdiğini ya da etkinliğin bulunduğu işlemi yok ettiğini bildiren bir dizi geri çağırma işlevi sağlar.
Yaşam döngüsü geri çağırma yöntemlerinde, kullanıcı ayrılıp etkinliğe yeniden girdiğinde etkinliğinizin nasıl davranacağını tanımlayabilirsiniz. Örneğin, akışlı bir video oynatıcı oluşturuyorsanız kullanıcı başka bir uygulamaya geçtiğinde videoyu duraklatabilir ve ağ bağlantısını sonlandırabilirsiniz. Kullanıcı geri döndüğünde, ağa yeniden bağlanabilir ve kullanıcının videoyu aynı noktadan devam ettirmesine izin verebilirsiniz.
Her geri çağırma, belirli bir durum değişikliğine uygun belirli bir işlem yapmanızı sağlar. Doğru işi doğru zamanda yapmak ve geçişleri düzgün bir şekilde yönetmek uygulamanızı daha sağlam ve performanslı hale getirir. Örneğin, yaşam döngüsü geri çağırmalarının iyi uygulanması, uygulamanızın aşağıdakilerden kaçınmasına yardımcı olabilir:
- Kullanıcı, telefon araması alırsa veya uygulamanızı kullanırken başka bir uygulamaya geçerse kilitlenme.
- Kullanıcının aktif olarak kullanmadığı zamanlarda değerli sistem kaynaklarını tüketme.
- Uygulamanızdan ayrılıp daha sonra uygulamaya geri dönen kullanıcıların ilerleme durumunu kaybetmek.
- Ekran yatay ve dikey yön arasında döndüğünde kullanıcının ilerleme durumunun kilitlenmesi veya kaybedilmesi.
Bu belgede, etkinlik yaşam döngüsü ayrıntılı olarak açıklanmaktadır. Belge, yaşam döngüsü paradigmasının açıklanmasıyla başlıyor. Ardından her bir geri çağırma açıklanır: Bu işlemler yürütüldüğünde dahili olarak neler olduğu ve bu işlemler sırasında ne uygulamanız gerektiği.
Ardından, etkinlik durumu ile bir sürecin sistem tarafından öldürülmeye karşı kırılganlığı arasındaki ilişkiyi kısaca tanıtır. Son olarak, etkinlik durumları arasındaki geçişlerle ilgili çeşitli konular ele alınmaktadır.
En iyi uygulamalar hakkında rehberlik de dahil olmak üzere yaşam döngülerini yönetme hakkında bilgi için Yaşam Döngüsüne Duyarlı Bileşenlerle Yaşam Döngülerini Yönetme ve Kullanıcı arayüzü durumlarını kaydetme bölümlerine bakın. Etkinlikleri, mimari bileşenleriyle birlikte kullanarak sağlam, üretim kalitesinde bir uygulama tasarlamayı öğrenmek için Uygulama mimarisi rehberini inceleyin.
Etkinlik yaşam döngüsü kavramları
Activity
sınıfı, etkinlik yaşam döngüsünün aşamaları arasındaki geçişlerde gezinmek için altı geri arama içeren temel bir grup sağlar:
onCreate()
,
onStart()
,
onResume()
,
onPause()
,
onStop()
ve
onDestroy()
. Etkinlik yeni bir duruma geçtiğinde sistem bu geri çağırmaların her birini çağırır.
Şekil 1, bu paradigmanın görsel bir temsilini göstermektedir.

Şekil 1. Etkinlik yaşam döngüsünün basitleştirilmiş bir gösterimi.
Kullanıcı etkinlikten ayrılmaya başladığında, sistem etkinliği ayırmak için yöntemler çağırır. Bazı durumlarda, etkinlik yalnızca kısmen kaldırılır ve kullanıcının başka bir uygulamaya geçmesi gibi durumlarda hâlâ bellekte kalır. Bu durumlarda, etkinlik yine de ön plana geri dönebilir.
Kullanıcı etkinliğe geri dönerse etkinlik kullanıcının kaldığı yerden devam eder. Birkaç istisna dışında, uygulamaların arka planda çalışırken etkinlik başlatması kısıtlanmıştır.
Sistemin belirli bir süreci ve bu süreçteki etkinlikleri sonlandırma olasılığı, o andaki aktiviteye bağlıdır. Durum ile çıkarma güvenlik açığı arasındaki ilişki hakkında daha fazla bilgi edinmek için etkinlik durumu ve bellekten çıkarma hakkındaki bölüme bakın.
Etkinliğinizin karmaşıklığına bağlı olarak muhtemelen tüm yaşam yaşam döngüsü yöntemlerini uygulamanız gerekmez. Ancak her birini anlamanız ve uygulamanızı kullanıcıların beklediği şekilde davranmasını sağlayan kriterleri uygulamanız önemlidir.
Yaşam döngüsü geri aramaları
Bu bölümde, etkinlik yaşam döngüsü boyunca kullanılan geri çağırma yöntemleri hakkında kavramsal ve uygulama bilgileri sağlanmaktadır.
Bazı işlemler etkinlik yaşam döngüsü yöntemlerine aittir. Bununla birlikte, etkinlik yaşam döngüsü yöntemi yerine, bileşene bağımlı bir bileşenin işlemlerini uygulayan kodu yerleştirin. Bunu başarmak için bağımlı bileşeni yaşam döngüsüne duyarlı hale getirmeniz gerekir. Bağımlı bileşenlerinizin yaşam döngüsüne duyarlı olmasını nasıl sağlayabileceğinizi öğrenmek için Yaşam Döngüsüne Duyarlı Bileşenlerle Yaşam Döngülerini İşleme bölümüne bakın.
onCreate()
Sistem etkinliği ilk kez oluşturduğunda tetiklenen bu geri çağırmayı uygulamanız gerekir. Etkinlik oluşturulduğunda, etkinlik Oluşturuldu durumuna geçer.
onCreate()
yönteminde, etkinlik süresince yalnızca bir kez gerçekleşen temel uygulama başlatma mantığını gerçekleştirin.
Örneğin, onCreate()
uygulamanız, verileri listelere bağlayabilir, etkinliği bir ViewModel
ile ilişkilendirebilir ve bazı sınıf kapsamı değişkenlerini örneklendirebilir. Bu yöntem, etkinliğin önceden kaydedilmiş durumunu içeren bir Bundle
nesnesi olan savedInstanceState
parametresini alır. Etkinlik daha önce hiç var olmadıysa Bundle
nesnesinin değeri null olur.
Etkinliğinizin yaşam döngüsüne bağlı, yaşam döngüsünü algılayan bir bileşeniniz varsa ON_CREATE
etkinliğini alır. @OnLifecycleEvent
ek açıklaması eklenen yöntem, yaşam döngüsüne duyarlı bileşeninizin, oluşturulan durum için ihtiyaç duyduğu tüm kurulum kodunu gerçekleştirebilmesi için çağrılır.
Aşağıdaki onCreate()
yöntemi örneğinde, kullanıcı arayüzünün tanıtılması (XML düzen dosyasında tanımlanır), üye değişkenlerinin tanımlanması ve kullanıcı arayüzünün bir kısmını yapılandırma gibi temel etkinlik kurulumu gösterilmektedir. Bu örnekte XML düzen dosyası, dosyanın kaynak kimliğini (R.layout.main_activity
) setContentView()
hedefine iletir.
Kotlin
lateinit var textView: TextView // Some transient state for the activity instance. var gameState: String? = null override fun onCreate(savedInstanceState: Bundle?) { // Call the superclass onCreate to complete the creation of // the activity, like the view hierarchy. super.onCreate(savedInstanceState) // Recover the instance state. gameState = savedInstanceState?.getString(GAME_STATE_KEY) // Set the user interface layout for this activity. // The layout is defined in the project res/layout/main_activity.xml file. setContentView(R.layout.main_activity) // Initialize member TextView so it is available later. textView = findViewById(R.id.text_view) } // This callback is called only when there is a saved instance previously saved using // onSaveInstanceState(). Some state is restored in onCreate(). Other state can optionally // be restored here, possibly usable after onStart() has completed. // The savedInstanceState Bundle is same as the one used in onCreate(). override fun onRestoreInstanceState(savedInstanceState: Bundle?) { textView.text = savedInstanceState?.getString(TEXT_VIEW_KEY) } // Invoked when the activity might be temporarily destroyed; save the instance state here. override fun onSaveInstanceState(outState: Bundle?) { outState?.run { putString(GAME_STATE_KEY, gameState) putString(TEXT_VIEW_KEY, textView.text.toString()) } // Call superclass to save any view hierarchy. super.onSaveInstanceState(outState) }
Java
TextView textView; // Some transient state for the activity instance. String gameState; @Override public void onCreate(Bundle savedInstanceState) { // Call the superclass onCreate to complete the creation of // the activity, like the view hierarchy. super.onCreate(savedInstanceState); // Recover the instance state. if (savedInstanceState != null) { gameState = savedInstanceState.getString(GAME_STATE_KEY); } // Set the user interface layout for this activity. // The layout is defined in the project res/layout/main_activity.xml file. setContentView(R.layout.main_activity); // Initialize member TextView so it is available later. textView = (TextView) findViewById(R.id.text_view); } // This callback is called only when there is a saved instance previously saved using // onSaveInstanceState(). Some state is restored in onCreate(). Other state can optionally // be restored here, possibly usable after onStart() has completed. // The savedInstanceState Bundle is same as the one used in onCreate(). @Override public void onRestoreInstanceState(Bundle savedInstanceState) { textView.setText(savedInstanceState.getString(TEXT_VIEW_KEY)); } // Invoked when the activity might be temporarily destroyed; save the instance state here. @Override public void onSaveInstanceState(Bundle outState) { outState.putString(GAME_STATE_KEY, gameState); outState.putString(TEXT_VIEW_KEY, textView.getText()); // Call superclass to save any view hierarchy. super.onSaveInstanceState(outState); }
XML dosyasını tanımlamaya ve setContentView()
öğesine iletmeye alternatif olarak, etkinlik kodunuzda yeni View
nesneleri oluşturabilir ve ViewGroup
içine yeni View
nesneleri ekleyerek bir görünüm hiyerarşisi oluşturabilirsiniz. Daha sonra bu düzeni, kök ViewGroup
öğesini setContentView()
öğesine geçirerek kullanırsınız.
Kullanıcı arayüzü oluşturma hakkında daha fazla bilgi için kullanıcı arayüzü belgelerine bakın.
Etkinliğiniz Oluşturuldu
durumunda kalmaz. onCreate()
yönteminin yürütülmesi bittikten sonra, etkinlik Başlatıldı durumuna girer ve sistem hızlı bir şekilde onStart()
ve onResume()
yöntemlerini çağırır.
onStart()
Etkinlik, Başlatıldı durumuna geçtiğinde sistem
onStart()
komutunu çağırır.
Bu çağrı, uygulama ön plana girip etkileşimli hale gelmek üzere etkinliğe hazırlanırken etkinliğin kullanıcı tarafından görülebilmesini sağlar.
Örneğin, bu yöntemde, kullanıcı arayüzünü koruyan kod başlatılır.
Etkinlik Başlatıldı durumuna geçtiğinde, etkinliğin yaşam döngüsüne bağlı yaşam döngüsüne duyarlı tüm bileşenler ON_START
etkinliğini alır.
onStart()
yöntemi hızlı bir şekilde tamamlanır ve Oluşturuldu durumunda olduğu gibi etkinlik Başlatıldı durumunda kalmaz. Bu geri çağırma bittikten sonra, etkinlik Devam ettirildi durumuna geçer ve sistem onResume()
yöntemini çağırır.
onContinue()
Etkinlik Devam ettirildi durumuna girdiğinde ön plana gelir ve sistem onResume()
geri çağırmasını çağırır. Bu, uygulamanın kullanıcıyla etkileşim
durumudur. Cihaz, telefon araması alma, kullanıcının başka bir etkinliğe gitmesi veya cihaz ekranının kapanması gibi başka bir nedenle uygulamadan ayrılana kadar uygulama bu durumda kalır.
Etkinlik Devam ettirildi durumuna geçtiğinde, etkinliğin yaşam döngüsüne bağlı yaşam döngüsüne duyarlı tüm bileşenler ON_RESUME
etkinliğini alır. Burada yaşam döngüsü bileşenleri, bileşen görünür durumdayken ve ön plandayken (ör. kamera önizlemesi başlatma) çalışması gereken tüm işlevleri etkinleştirebilir.
Kesici bir etkinlik gerçekleştiğinde, etkinlik Duraklatıldı durumuna geçer ve sistem onPause()
geri çağırmasını çağırır.
Etkinlik Duraklatılmış durumdan Devam ettirildi durumuna dönerse sistem bir kez daha onResume()
yöntemini çağırır. Bu nedenle, onPause()
sırasında yayınladığınız bileşenleri başlatmak ve etkinlik Devam ettirildi durumuna her girdiğinde yapılması gereken diğer başlatma işlemlerini gerçekleştirmek için onResume()
uygulayın.
Bileşen ON_RESUME
etkinliğini aldığında kameraya erişen yaşam döngüsüne duyarlı bir bileşen örneğini burada görebilirsiniz:
Kotlin
class CameraComponent : LifecycleObserver { ... @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun initializeCamera() { if (camera == null) { getCamera() } } ... }
Java
public class CameraComponent implements LifecycleObserver { ... @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void initializeCamera() { if (camera == null) { getCamera(); } } ... }
Önceki kod, LifecycleObserver
ON_RESUME
etkinliğini aldıktan sonra kamerayı başlatır. Ancak, çoklu pencere modunda etkinliğiniz Duraklatıldı durumunda olsa bile tamamen görülebilir. Örneğin, uygulama çoklu pencere modunda olduğunda ve kullanıcı etkinliğinizi içermeyen pencereye dokunduğunda etkinliğiniz Duraklatıldı durumuna geçer.
Kameranın yalnızca uygulama Devam ettirildiğinde (görünür ve ön planda etkin) etkin olmasını istiyorsanız önceden gösterilen ON_RESUME
etkinliğinden sonra kamerayı başlatın. Etkinlik Duraklatılmış ancak görünür durumdayken (ör. çoklu pencere modu) kameranın etkin kalmasını istiyorsanız ON_START
etkinliğinden sonra kamerayı başlatın.
Ancak, etkinliğiniz Duraklatılmış durumdayken kameranın etkin olması, birden fazla pencere modundaki başka bir devam ettirilen uygulamaya kameraya erişilmesini engelleyebilir. Bazen etkinliğiniz Duraklatılmış durumdayken kamerayı etkin tutmak gerekir, ancak bu durumda genel kullanıcı tecrübesi kötüleşebilir.
Bu nedenle, çoklu pencere modu bağlamında paylaşılan sistem kaynaklarını kontrol etmenin en uygun yaşam döngüsünde nerede olduğunu dikkatlice düşünün. Çoklu pencere modunu destekleme hakkında daha fazla bilgi edinmek için Çoklu pencere desteği sayfasını inceleyin.
Bir başlatma işlemini hangi derleme etkinliğinde gerçekleştirmeyi seçtiğinize bakılmaksızın kaynağı serbest bırakmak için ilgili yaşam döngüsü etkinliğini kullandığınızdan emin olun. Bir öğeyi ON_START
etkinliğinden sonra başlatırsanız ON_STOP
etkinliğinden sonra yayınlayın veya sonlandırın. Etkinliği ON_RESUME
etkinliğinden sonra başlatırsanız ON_PAUSE
etkinliğinden sonra yayınlayın.
Önceki kod snippet'i, kamera başlatma kodunu yaşam döngüsüne duyarlı bir bileşene yerleştirir. Bunun yerine, bu kodu onStart()
ve onStop()
gibi doğrudan etkinlik yaşam döngüsü geri çağırmalarına yerleştirebilirsiniz. Ancak bunu yapmanız önerilmez. Bu mantığı bağımsız ve yaşam döngüsüne duyarlı bir bileşene eklemek, kodu yinelemek zorunda kalmadan bileşeni birden çok etkinlikte yeniden kullanabilmenizi sağlar. Yaşam döngüsüne duyarlı bileşen oluşturmayı öğrenmek için Yaşam Döngüsüne Duyarlı Bileşenlerle Yaşam Döngülerini Yönetme bölümüne bakın.
onPause()
Sistem bu yöntemi kullanıcının etkinliğinizden ayrıldığının ilk göstergesi olarak adlandırır; ancak bu, her zaman etkinliğin silindiği anlamına gelmez. Bu, etkinliğin artık ön planda olmadığını ancak kullanıcı çoklu pencere modundaysa hâlâ görünür olduğunu belirtir. Bir etkinliğin bu duruma girmesinin birkaç nedeni vardır:
- onContinue() geri çağırmasıyla ilgili bölümde açıklandığı gibi, uygulama yürütmeyi kesintiye uğratan bir etkinlik, geçerli etkinliği duraklatır. Bu en yaygın durumdur.
- Çoklu pencere modunda, aynı anda yalnızca bir uygulamaya odaklanılır ve sistem diğer tüm uygulamaları duraklatır.
- İletişim kutusu gibi yeni, yarı şeffaf bir etkinlik açıldığında, kapsanan etkinlik duraklatılır. Etkinlik, kısmen görünür olduğu ancak odakta olmadığı sürece duraklatılmış olarak kalır.
Bir etkinlik Duraklatıldı durumuna geçtiğinde, etkinliğin yaşam döngüsüne bağlı yaşam döngüsüne duyarlı tüm bileşenler ON_PAUSE
etkinliğini alır. Yaşam döngüsü bileşenleri bu noktada, bileşen ön planda değilken çalışması gerekmeyen işlevleri (ör. kamera önizlemesini durdurma) durdurabilir.
Activity
Duraklatılmış durumdayken ve kısa süre içinde devam ettirmeyi beklediğiniz işlemleri devam edemeyecek veya moderasyonda devam edebilecek işlemleri duraklatmak ya da ayarlamak için onPause()
yöntemini kullanın.
Sistem kaynaklarını, sensörleri (GPS gibi) ya da etkinliğiniz Duraklatılmış durumdayken kullanıcının buna ihtiyaç duymadığı zamanlarda pil ömrünü etkileyen kaynakları serbest bırakmak için onPause()
yöntemini de kullanabilirsiniz.
Ancak onResume()
ile ilgili bölümde belirtildiği gibi, uygulama birden fazla pencere modundaysa Duraklatılmış etkinlik yine de tamamen görünebilir.
Çoklu pencere modunu daha iyi desteklemek amacıyla, kullanıcı arayüzüyle ilgili kaynakları ve işlemleri tam olarak serbest bırakmak veya düzenlemek için onPause()
yerine onStop()
kullanmayı düşünün.
Aşağıdaki ON_PAUSE
etkinliğine tepki veren LifecycleObserver
örneği, bir önceki ON_RESUME
etkinliği örneğinin karşılığıdır. Bu örnekte, ON_RESUME
etkinliği alındıktan sonra başlatılan kamera serbest bırakılır:
Kotlin
class CameraComponent : LifecycleObserver { ... @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) fun releaseCamera() { camera?.release() camera = null } ... }
Java
public class JavaCameraComponent implements LifecycleObserver { ... @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void releaseCamera() { if (camera != null) { camera.release(); camera = null; } } ... }
Bu örnekte, kamera sürüm kodu, ON_PAUSE
etkinliği LifecycleObserver
tarafından alındıktan sonra yerleştirilmektedir.
onPause()
yürütme işlemi çok kısadır ve kaydetme işlemlerinin gerçekleştirilmesi için yeterli zaman sunmaz. Bu nedenle, uygulama veya kullanıcı verilerini kaydetmek, ağ çağrıları yapmak ya da veritabanı işlemlerini yürütmek için onPause()
uygulamasını kullanmayın. Bu tür çalışmalar, yöntem tamamlanmadan
tamamlanmayabilir.
Bunun yerine, onStop()
sırasında ağır yük kapatma işlemleri gerçekleştirin. onStop()
sırasında gerçekleştirilebilecek uygun işlemler hakkında daha fazla bilgi için sonraki bölüme bakın. Veri kaydetme hakkında daha fazla bilgi için durumu kaydetme ve geri yükleme hakkındaki bölüme bakın.
onPause()
yönteminin tamamlanması, etkinliğin Duraklatıldı durumundan ayrıldığı anlamına gelmez. Bunun yerine, etkinlik devam edene veya kullanıcı tarafından tamamen görünmez hale gelene kadar bu durumda kalır. Etkinlik devam ederse sistem bir kez daha onResume()
geri çağırmasını çağırır.
Etkinlik Duraklatılmış durumdan Devam ettirildi durumuna dönerse sistem, onResume()
yöntemini çağırdığında bu örneği geri çağırarak Activity
örneğini bellekte sabit tutar.
Bu senaryoda, geri arama yöntemlerinden herhangi biri sırasında oluşturulan ve Devam ettirildi durumuna yol açan bileşenleri yeniden başlatmanız gerekmez. Etkinlik tamamen görünmez hale gelirse sistem onStop()
çağırır.
onStop()
Etkinliğiniz kullanıcı tarafından artık görülemediğinde Durduruldu durumuna geçer ve sistem onStop()
geri çağırmasını çağırır. Bu durum, yeni başlatılan bir etkinlik ekranın tamamını kapladığında ortaya çıkabilir. Sistem, etkinliğin çalışması bittiğinde ve sonlandırılmak üzereyken de onStop()
öğesini çağırır.
Etkinlik Durduruldu durumuna geçtiğinde, etkinliğin yaşam döngüsüne bağlı yaşam döngüsüne duyarlı tüm bileşenler ON_STOP
etkinliğini alır. Burada yaşam döngüsü bileşenleri, bileşen ekranda görünür değilken çalışması gerekmeyen işlevleri durdurabilir.
onStop()
yönteminde, uygulama kullanıcı tarafından görülemiyorken gerekli olmayan kaynakları serbest bırakın veya ayarlayın. Örneğin, uygulamanız animasyonları duraklatabilir veya ayrıntılı konum güncellemelerinden genel konum güncellemelerine geçiş yapabilir. onPause()
yerine onStop()
kullanıldığında, kullanıcı, etkinliğinizi birden fazla pencere modunda görüntülese bile kullanıcı arayüzüyle ilgili çalışmalar devam eder.
Nispeten yoğun CPU kullanan kapatma işlemleri yapmak için de onStop()
kullanın. Örneğin, bilgileri bir veritabanına kaydetmek için daha uygun bir zaman bulamıyorsanız bunu onStop()
sırasında yapabilirsiniz. Aşağıdaki örnekte, bir taslak notun içeriğini kalıcı depolama alanına kaydeden bir onStop()
uygulaması gösterilmektedir:
Kotlin
override fun onStop() { // Call the superclass method first. super.onStop() // Save the note's current draft, because the activity is stopping // and we want to be sure the current note progress isn't lost. val values = ContentValues().apply { put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText()) put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle()) } // Do this update in background on an AsyncQueryHandler or equivalent. asyncQueryHandler.startUpdate( token, // int token to correlate calls null, // cookie, not used here uri, // The URI for the note to update. values, // The map of column names and new values to apply to them. null, // No SELECT criteria are used. null // No WHERE columns are used. ) }
Java
@Override protected void onStop() { // Call the superclass method first. super.onStop(); // Save the note's current draft, because the activity is stopping // and we want to be sure the current note progress isn't lost. ContentValues values = new ContentValues(); values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText()); values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle()); // Do this update in background on an AsyncQueryHandler or equivalent. asyncQueryHandler.startUpdate ( mToken, // int token to correlate calls null, // cookie, not used here uri, // The URI for the note to update. values, // The map of column names and new values to apply to them. null, // No SELECT criteria are used. null // No WHERE columns are used. ); }
Önceki kod örneği doğrudan SQLite kullanır. Ancak SQLite üzerinde soyutlama katmanı sağlayan bir kalıcılık kitaplığı olan Room'u kullanmanızı öneririz. Room kullanmanın avantajları ve uygulamanızda Odayı nasıl uygulayacağınız hakkında daha fazla bilgi edinmek için Oda Kalıcılığı Kitaplığı kılavuzuna bakın.
Etkinliğiniz Durduruldu durumuna geçtiğinde Activity
nesnesi bellekte yerleşik olarak tutulur: Tüm durum ve üye bilgilerini saklar ancak pencere yöneticisine eklenmez. Etkinlik devam ettiğinde
bu bilgileri hatırlar.
Devam ettirildi durumuna neden olan geri çağırma yöntemlerinin herhangi birinde oluşturulan bileşenleri yeniden başlatmanız gerekmez. Sistem, düzendeki her View
nesnesinin geçerli durumunu da izler. Böylece kullanıcı, EditText
widget'ına metin girerse söz konusu içerik saklandığı için kaydedip geri yüklemenize gerek kalmaz.
Not: Etkinliğiniz durdurulduğunda, sistemin belleği kurtarması gerekirse sistem, etkinliği içeren işlemi yok edebilir.
Sistem, etkinlik durdurulduğunda işlemi yok etse bile, sistem View
nesnelerinin durumunu (ör. EditText
widget'larındaki metinler) bir Bundle
(anahtar/değer çiftleri blob'u) içinde korur ve kullanıcı etkinliğe geri dönerse bunları geri yükler. Kullanıcının geri döndürdüğü bir etkinliği geri yükleme hakkında daha fazla bilgi için durumu kaydetme ve geri yükleme bölümüne bakın.
Durduruldu durumundan sonra etkinlik, kullanıcıyla etkileşimde bulunmak için geri gelir
veya etkinlik bitmiş olup kaybolur. Etkinlik geri gelirse sistem onRestart()
yöntemini çağırır.
Activity
çalışmayı bitirmişse sistem, onDestroy()
numaralı telefonu çağırır.
onDestroy()
Etkinlik kaldırılmadan önce onDestroy()
çağrılır. Sistem, bu geri çağırmayı aşağıdaki iki nedenden biri nedeniyle çağırır:
-
Kullanıcı etkinliği tamamen kapattığı veya etkinlikte
finish()
çağrıldığı için etkinlik tamamlanıyor. - Cihaz döndürme veya çoklu pencere moduna geçme gibi bir yapılandırma değişikliği nedeniyle sistem, etkinliği geçici olarak siliyor.
Etkinlik kaldırıldı durumuna geçtiğinde, etkinliğin yaşam döngüsüne bağlı yaşam döngüsüne duyarlı tüm bileşenler ON_DESTROY
etkinliğini alır. Yaşam döngüsü bileşenleri, Activity
yok edilmeden önce ihtiyaç duydukları her şeyi buradan temizleyebilir.
Neden yok edildiğini belirlemek üzere Activity
öğenize mantığı yerleştirmek yerine, Activity
öğenize ilişkin ilgili görünüm verilerini içerecek bir ViewModel
nesne kullanın. Activity
bir yapılandırma değişikliği nedeniyle yeniden oluşturulursa ViewModel
korunduğu ve sonraki Activity
örneğine verildiği için herhangi bir işlem yapması gerekmez.
Activity
yeniden oluşturulmamışsa ViewModel
, onCleared()
yöntemini çağırır. Bu yöntemde, gerekli tüm verileri yok edilmeden önce temizleyebilirsiniz. isFinishing()
yöntemini kullanarak bu iki senaryoyu birbirinden ayırt edebilirsiniz.
Etkinlik bitiyorsa onDestroy()
, etkinliğin aldığı son yaşam döngüsü geri çağırmasıdır. Yapılandırma değişikliği sonucunda onDestroy()
çağrılırsa sistem hemen yeni bir etkinlik örneği oluşturur ve ardından yeni yapılandırmadaki bu yeni örnek için
onCreate()
çağırır.
onDestroy()
geri çağırması, onStop()
gibi önceki geri çağırmaların serbest bırakmadığı tüm kaynakları serbest bırakır.
Etkinlik durumu ve bellekten çıkarma
Sistem, RAM'i boşaltması gerektiğinde işlemleri sonlandırır. Sistemin belirli bir süreci sonlandırma olasılığı, sürecin o andaki durumuna bağlıdır. İşlem durumu, işlemde yürütülen etkinliğin durumuna bağlıdır. Tablo 1'de süreç durumu, etkinlik durumu ve sistemin süreci sonlandırma olasılığı arasındaki korelasyonlar gösterilmektedir. Bu tablo, yalnızca bir işlem diğer uygulama bileşeni türlerini çalıştırmıyorsa geçerlidir.
Öldürülme olasılığı | İşlem durumu | Son etkinlik durumu |
---|---|---|
En düşük | Ön plan (odaklanmak üzere veya odaklanmak üzere) | Devam ettirildi |
Düşük | Görünür (odak yok) | Başlatıldı/Duraklatıldı |
Daha yüksek | Arka plan (görünmez) | Durduruldu |
En yüksek | Boş | Kaldırıldı |
Tablo 1. İşlem yaşam döngüsü ile etkinlik durumu arasındaki ilişki.
Sistem, bellekte yer açmak için hiçbir zaman etkinlikleri doğrudan sonlandırmaz. Bunun yerine, etkinliğin yürütüldüğü süreci sonlandırarak yalnızca etkinliği değil, süreçteki diğer her şeyi de yok eder. Sistem tarafından başlatılan işlem ölümü gerçekleştiğinde etkinliğinizin kullanıcı arayüzü durumunu nasıl koruyacağınızı ve geri yükleyeceğinizi öğrenmek için durumu kaydetme ve geri yükleme ile ilgili bölüme bakın.
Kullanıcı, Ayarlar'ın altında Uygulama Yöneticisi'ni kullanarak ilgili uygulamayı kaldırarak da bir işlemi sonlandırabilir.
İşlemler hakkında daha fazla bilgi için Süreçlere ve iş parçacıklarına genel bakış bölümüne bakın.
Geçici kullanıcı arayüzü durumunu kaydetme ve geri yükleme
Kullanıcı, bir etkinliğin kullanıcı arayüzü durumunun, döndürme veya çoklu pencere moduna geçme gibi yapılandırma değişiklikleri boyunca aynı kalmasını bekler. Bununla birlikte, böyle bir yapılandırma değişikliği gerçekleştiğinde sistem varsayılan olarak etkinliği yok ederek etkinlik örneğinde depolanan kullanıcı arayüzü durumları silinir.
Benzer şekilde, bir kullanıcı geçici olarak uygulamanızdan farklı bir uygulamaya geçip daha sonra uygulamanıza geri döndüğünde kullanıcı arayüzü durumunun aynı kalmasını bekler. Ancak sistem, kullanıcı dışarıdayken ve etkinliğiniz durdurulduğunda uygulama işleminizi imha edebilir.
Sistem kısıtlamaları etkinliği yok ettiğinde, ViewModel
,
onSaveInstanceState()
ve/veya yerel depolama alanını birlikte kullanarak kullanıcının geçici kullanıcı arayüzü durumunu koruyun. Sistem davranışına kıyasla kullanıcı beklentileri ve karmaşık kullanıcı arayüzü durumu verilerinin sistem tarafından başlatılan etkinlik ve işlem ölümü genelinde en iyi şekilde nasıl korunacağı hakkında daha fazla bilgi edinmek için
Kullanıcı arayüzü durumlarını kaydetme bölümüne bakın.
Bu bölümde, örnek durumunun ne olduğu ve etkinliğin kendisine yapılan bir geri çağırma olan onSaveInstance()
yönteminin nasıl uygulanacağı açıklanmaktadır. Kullanıcı arayüzü verileriniz hafifse hem yapılandırma değişikliklerinde hem de sistem tarafından başlatılan işlem ölümünde kullanıcı arayüzü durumunu korumak için yalnızca onSaveInstance()
kullanabilirsiniz.
Ancak onSaveInstance()
için serileştirme/serileştirme maliyeti söz konusu olduğu için çoğu durumda
Kullanıcı arayüzü durumlarını kaydetme bölümünde açıklandığı gibi hem ViewModel
hem de onSaveInstance()
kullanılır.
Not: Yapılandırma değişiklikleri, gerekirse etkinlik yeniden oluşturma özelliğinin nasıl kısıtlanacağı, View system ve Jetpack Compose'dan bu yapılandırma değişikliklerine nasıl tepki verileceği hakkında daha fazla bilgi edinmek için Yapılandırma değişikliklerini işleme sayfasına göz atın.
Örnek durumu
Etkinliğinizin normal uygulama davranışı nedeniyle kaldırıldığı birkaç senaryo vardır. Örneğin, kullanıcının Geri düğmesine basması veya etkinlik sinyallerinizin finish()
yöntemini çağırarak kendi kendini yok ettiğini gösteren örnekler vardır.
Kullanıcı Geri düğmesine bastığı veya etkinlik kendi kendine bittiği için etkinliğiniz kaldırıldığında, hem sistemin hem de kullanıcının söz konusu Activity
örneği kalıcı olarak kaldırılır. Bu senaryolarda, kullanıcının beklentisi sistemin davranışıyla eşleşir ve sizin yapmanız gereken ek bir işlem yoktur.
Bununla birlikte, sistem, sistem kısıtlamaları (yapılandırma değişikliği veya bellek baskısı gibi) nedeniyle etkinliği yok ederse gerçek Activity
örneği ortadan kalkmış olsa bile sistem, etkinliğin mevcut olduğunu hatırlar. Kullanıcı etkinliğe geri dönmeye çalışırsa sistem, etkinliğin kaldırıldığı andaki durumunu açıklayan bir kayıtlı veri kümesini kullanarak bu etkinliğin yeni bir örneğini oluşturur.
Sistemin önceki durumu geri yüklemek için kullandığı kayıtlı verilere örnek durumu adı verilir. Bir Bundle
nesnesinde depolanan anahtar/değer çiftleri koleksiyonudur. Varsayılan olarak sistem, etkinlik düzeninizdeki her View
nesnesi hakkında bir EditText
widget'ına girilen metin değeri gibi bilgileri kaydetmek için Bundle
örnek durumunu kullanır.
Dolayısıyla, etkinlik örneğiniz kaldırılır ve yeniden oluşturulursa düzenin durumu, sizin koda ihtiyaç duymadan önceki durumuna geri yüklenir. Ancak etkinliğinizde, kullanıcının etkinlikteki ilerlemesini izleyen üye değişkenleri gibi geri yüklemek istediğiniz daha çok durum bilgisi olabilir.
Not: Android sisteminin etkinliğinizdeki görünümlerin durumunu geri yükleyebilmesi için her görünümün android:id
özelliği ile sağlanan benzersiz bir kimliğinin olması gerekir.
Bundle
nesnesi, ana iş parçacığında serileştirme gerektirdiği ve sistem işlem belleğini tükettiği için çok az miktarda verinin korunması için uygun değildir. Çok az miktarda veriden fazlasını korumak istiyorsanız kalıcı yerel depolama alanı, onSaveInstanceState()
yöntemi ve ViewModel
sınıfını kullanarak verileri korumak için
Kullanıcı arayüzü durumlarını kaydetme konusunda birleşik bir yaklaşım benimseyin.
onSaveInstanceState() işlevini kullanarak basit ve basit kullanıcı arayüzü durumlarını kaydedin
Etkinliğiniz durmaya başladığında, sistem onSaveInstanceState()
yöntemini çağırır. Böylece etkinliğiniz, durum bilgilerini bir örnek durum paketine kaydedebilir. Bu yöntemin varsayılan uygulaması, bir EditText
widget'ındaki metin veya bir ListView
widget'ının kaydırma konumu gibi etkinliğin görünüm hiyerarşisinin durumuyla ilgili geçici bilgileri kaydeder.
Etkinliğinizle ilgili ek örnek durumu bilgilerini kaydetmek için onSaveInstanceState()
özelliğini geçersiz kılın ve etkinliğinizin beklenmedik bir şekilde kaldırılması durumunda kaydedilen Bundle
nesnesine anahtar/değer çiftleri ekleyin. onSaveInstanceState()
ayarını geçersiz kıldığınızda, varsayılan uygulamanın görünüm hiyerarşisinin durumunu kaydetmesini istiyorsanız üst sınıf uygulamasını çağırmanız gerekir.
Bu, aşağıdaki örnekte gösterilmiştir:
Kotlin
override fun onSaveInstanceState(outState: Bundle?) { // Save the user's current game state. outState?.run { putInt(STATE_SCORE, currentScore) putInt(STATE_LEVEL, currentLevel) } // Always call the superclass so it can save the view hierarchy state. super.onSaveInstanceState(outState) } companion object { val STATE_SCORE = "playerScore" val STATE_LEVEL = "playerLevel" }
Java
static final String STATE_SCORE = "playerScore"; static final String STATE_LEVEL = "playerLevel"; // ... @Override public void onSaveInstanceState(Bundle savedInstanceState) { // Save the user's current game state. savedInstanceState.putInt(STATE_SCORE, currentScore); savedInstanceState.putInt(STATE_LEVEL, currentLevel); // Always call the superclass so it can save the view hierarchy state. super.onSaveInstanceState(savedInstanceState); }
Not:
onSaveInstanceState()
, kullanıcı etkinliği açıkça kapattığında veya finish()
çağrıldığında çağrılmaz.
Kullanıcı tercihleri veya veritabanı verileri gibi kalıcı verileri kaydetmek için etkinliğiniz ön plandayken uygun fırsatlardan yararlanın.
Böyle bir fırsat ortaya çıkmazsa kalıcı verileri onStop()
yöntemi sırasında kaydedin.
Kayıtlı örnek durumunu kullanarak etkinlik kullanıcı arayüzü durumunu geri yükleme
Etkinliğiniz daha önce kaldırıldıktan sonra yeniden oluşturulduğunda, kayıtlı örnek durumunuzu sistemin etkinliğinize gönderdiği Bundle
bölümünden kurtarabilirsiniz. Hem onCreate()
hem de
onRestoreInstanceState()
geri çağırma yöntemleri, örnek durumu bilgilerini içeren aynı Bundle
'u alır.
Sistem, etkinliğinizin yeni bir örneğini yeniden oluşturuyorsa onCreate()
yöntemi çağrıldığından, okumayı denemeden önce Bundle
durumunun null olup olmadığını kontrol etmeniz gerekir. Boşsa sistem, kaldırılan önceki bir örneği geri yüklemek yerine etkinliğin yeni bir örneğini oluşturur.
Aşağıdaki kod snippet'i, onCreate()
ürününde bazı durum verilerini nasıl geri yükleyebileceğinizi göstermektedir:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Always call the superclass first // Check whether we're recreating a previously destroyed instance. if (savedInstanceState != null) { with(savedInstanceState) { // Restore value of members from saved state. currentScore = getInt(STATE_SCORE) currentLevel = getInt(STATE_LEVEL) } } else { // Probably initialize members with default values for a new instance. } // ... }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Always call the superclass first // Check whether we're recreating a previously destroyed instance. if (savedInstanceState != null) { // Restore value of members from saved state. currentScore = savedInstanceState.getInt(STATE_SCORE); currentLevel = savedInstanceState.getInt(STATE_LEVEL); } else { // Probably initialize members with default values for a new instance. } // ... }
onCreate()
sırasında durumu geri yüklemek yerine sistemin onStart()
yönteminden sonra çağırdığı onRestoreInstanceState()
özelliğini uygulayabilirsiniz. Sistem onRestoreInstanceState()
işlemini yalnızca geri yüklenecek kayıtlı bir durum varsa çağırır. Bu nedenle, Bundle
öğesinin null olup olmadığını kontrol etmenize gerek yoktur.
Kotlin
override fun onRestoreInstanceState(savedInstanceState: Bundle?) { // Always call the superclass so it can restore the view hierarchy. super.onRestoreInstanceState(savedInstanceState) // Restore state members from saved instance. savedInstanceState?.run { currentScore = getInt(STATE_SCORE) currentLevel = getInt(STATE_LEVEL) } }
Java
public void onRestoreInstanceState(Bundle savedInstanceState) { // Always call the superclass so it can restore the view hierarchy. super.onRestoreInstanceState(savedInstanceState); // Restore state members from saved instance. currentScore = savedInstanceState.getInt(STATE_SCORE); currentLevel = savedInstanceState.getInt(STATE_LEVEL); }
Dikkat: Varsayılan uygulamanın görünüm hiyerarşisinin durumunu geri yükleyebilmesi için her zaman onRestoreInstanceState()
üst sınıf uygulamasını çağırın.
Etkinlikler arasında gezinme
Bir uygulama, uygulama ömrü boyunca muhtemelen birçok kez (ör. kullanıcı cihazın Geri düğmesine dokunduğunda veya etkinlik farklı bir etkinlik başlattığında) girip bir aktiviteden çıkar.
Bu bölümde, etkinlik geçişlerini başarılı bir şekilde uygulamak için bilmeniz gereken konular ele alınmaktadır. Bu konular başka bir etkinlikten etkinlik başlatma, etkinlik durumunu kaydetme ve etkinlik durumunu geri yüklemeyi içerir.
Bir etkinliği başka bir yerden başlatma
Bir etkinliğin genellikle bir noktada başka bir etkinlik başlatması gerekir. Örneğin, bir uygulamanın mevcut ekrandan yeni bir ekrana taşınması gerektiğinde bu durum ortaya çıkar.
Etkinliğinizin başlamak üzere olan yeni etkinlikten bir sonuç geri almak isteyip istemediğine bağlı olarak yeni etkinliği startActivity()
veya startActivityForResult()
yöntemini kullanarak başlatırsınız. Her iki durumda da bir Intent
nesnesi geçirirsiniz.
Intent
nesnesi, tam olarak başlatmak istediğiniz etkinliği belirtir veya gerçekleştirmek istediğiniz işlemin türünü açıklar.
Sistem sizin için uygun etkinliği seçer. Bu etkinlik, farklı bir uygulamadan bile olabilir. Bir Intent
nesnesi, başlatılan etkinlik tarafından kullanılacak az miktarda veri de taşıyabilir.
Intent
sınıfı hakkında daha fazla bilgi için Amaçlar ve Amaç Filtreleri bölümüne bakın.
startActivity()
Yeni başlatılan etkinliğin bir sonuç döndürmesi gerekmiyorsa mevcut etkinlik, startActivity()
yöntemini çağırarak etkinliği başlatabilir.
Kendi uygulamanızın içinde çalışırken genellikle bilinen bir etkinliği başlatmanız gerekir.
Örneğin, aşağıdaki kod snippet'inde SignInActivity
adlı bir etkinliğin nasıl başlatılacağı gösterilmektedir.
Kotlin
val intent = Intent(this, SignInActivity::class.java) startActivity(intent)
Java
Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);
Uygulamanız, etkinliğinizden elde edilen verileri kullanarak e-posta, kısa mesaj veya durum güncellemesi göndermek gibi bazı işlemler de yapmak isteyebilir. Bu durumda, uygulamanızın bu tür işlemleri gerçekleştirmek için kendi etkinlikleri olmayabilir. Dolayısıyla bunun yerine, cihazdaki diğer uygulamaların sağladığı etkinliklerden yararlanabilir ve böylece, işlemleri sizin yerinize gerçekleştirebilirsiniz.
Bu noktada amaçların kıymetli olduğunu söyleyebiliriz. Yapmak istediğiniz eylemi açıklayan bir niyet oluşturabilirsiniz ve sistem başka bir uygulamadan uygun etkinliği başlatır. Amacı işleyebilecek birden fazla etkinlik varsa kullanıcı, hangisinin kullanılacağını seçebilir. Örneğin, kullanıcının e-posta iletisi göndermesine izin vermek istiyorsanız aşağıdaki amacı oluşturabilirsiniz:
Kotlin
val intent = Intent(Intent.ACTION_SEND).apply { putExtra(Intent.EXTRA_EMAIL, recipientArray) } startActivity(intent)
Java
Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
Niyete eklenen ekstra EXTRA_EMAIL
, e-postanın gönderileceği e-posta adreslerinden oluşan bir dize dizisidir. Bir e-posta uygulaması bu amaca yanıt verdiğinde, ekstra kısımda sağlanan dize dizisini okur ve adresleri, e-posta yazma formunun "to" alanına yerleştirir. Bu durumda, e-posta uygulamasının etkinliği başlar ve kullanıcı işlemi bittiğinde etkinliğiniz devam eder.
startActivityForResult()
Bazen, sona eren bir etkinlikten sonuç almak istersiniz. Örneğin, kullanıcının kişi listesinden bir kişi
seçebilmesini sağlayan bir etkinlik başlatabilirsiniz. Sona erdiğinde, seçilen
kişiyi döndürür. Bunu yapmak için startActivityForResult(Intent, int)
yöntemini çağırırsınız. Bu yöntemde, tam sayı parametresi çağrıyı tanımlar.
Bu tanımlayıcı, aynı etkinlikten startActivityForResult(Intent, int)
'ye yapılan birden fazla çağrıyı birbirinden ayırt etmek için kullanılır. Genel bir tanımlayıcı değildir ve diğer uygulamalarla veya etkinliklerle çakışma riski yoktur. Sonuç, onActivityResult(int, int, Intent)
yönteminizle geri gelir.
Bir alt etkinlik çıktığında, verileri üst etkinliğine döndürmek için setResult(int)
yöntemini çağırabilir.
Alt etkinlik bir sonuç kodu sağlamalıdır. Bu kod standart sonuçlar (RESULT_CANCELED
, RESULT_OK
veya RESULT_FIRST_USER
ile başlayan herhangi bir özel değer) olabilir.
Buna ek olarak, alt etkinlik isteğe bağlı olarak istediği ek verileri içeren bir Intent
nesnesi döndürebilir. Üst etkinlik, bilgileri almak için üst etkinliğin başlangıçta sağladığı tam sayı tanımlayıcısıyla birlikte onActivityResult(int, int, Intent)
yöntemini kullanır.
Bir alt etkinlik, kilitlenme gibi herhangi bir nedenle başarısız olursa üst etkinlik RESULT_CANCELED
kodunu içeren bir sonuç alır.
Kotlin
class MyActivity : Activity() { // ... override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { // When the user center presses, let them pick a contact. startActivityForResult( Intent(Intent.ACTION_PICK,Uri.parse("content://contacts")), PICK_CONTACT_REQUEST) return true } return false } override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) { when (requestCode) { PICK_CONTACT_REQUEST -> if (resultCode == RESULT_OK) { // A contact was picked. Display it to the user. startActivity(Intent(Intent.ACTION_VIEW, intent?.data)) } } } companion object { internal val PICK_CONTACT_REQUEST = 0 } }
Java
public class MyActivity extends Activity { // ... static final int PICK_CONTACT_REQUEST = 0; public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { // When the user center presses, let them pick a contact. startActivityForResult( new Intent(Intent.ACTION_PICK, new Uri("content://contacts")), PICK_CONTACT_REQUEST); return true; } return false; } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_CONTACT_REQUEST) { if (resultCode == RESULT_OK) { // A contact was picked. Display it to the user. startActivity(new Intent(Intent.ACTION_VIEW, data)); } } } }
Etkinlikleri koordine etme
Bir etkinlik başka bir etkinlik başladığında her ikisi de yaşam döngüsü geçişleri yaşar. İlk etkinlik çalışmayı durdurur ve Duraklatıldı veya Durduruldu durumuna geçerken diğer etkinlik oluşturulur. Bu etkinlikler diske veya başka bir yere kaydedilen verileri paylaşıyorsa ilk etkinlik, ikinci etkinlik oluşturulmadan önce tamamen durdurulmamıştır. İkinciyi başlatma süreci, ilkini durdurma süreciyle çakışır.
Yaşam döngüsü geri çağırmalarının sırası, özellikle iki etkinlik aynı süreçte (yani aynı uygulamada) ve biri diğerini başlatıyorsa iyi tanımlanmıştır. A etkinliği B aktivitesini başlattığında gerçekleşen işlemlerin sırası şu şekildedir:
- A etkinliğinin
onPause()
yöntemi yürütülür. - B Etkinliğinin
onCreate()
,onStart()
veonResume()
yöntemleri sırayla yürütülür. B Etkinliği artık kullanıcı odağında. - A Etkinliği artık ekranda görünmüyorsa
onStop()
yöntemi yürütülür.
Yaşam döngüsü boyunca yapılan bu geri çağırma işlemleri, bilgilerin bir etkinlikten diğerine geçişini yönetmenize olanak tanır.