Her Fragment
örneğinin kendi yaşam döngüsü vardır. Bir kullanıcı uygulamanızda gezinirken ve uygulamanızla etkileşimde bulunduğunda, parçalarınız ekleme, kaldırma ve ekrana girme ya da ekrandan çıkma gibi yaşam döngüleri içinde çeşitli durumlardan geçer.
Fragment
, yaşam döngüsünü yönetmek için LifecycleOwner
aracını uygulayarak getLifecycle()
yöntemiyle erişebileceğiniz bir Lifecycle
nesnesini kullanıma sunar.
Olası her Lifecycle
durumu Lifecycle.State
sıralamasında temsil edilir.
Lifecycle
üzerine Fragment
derleyerek Yaşam Döngüsünü Yaşam Döngüsüne Duyarlı Bileşenlerle İşleme için sunulan teknikleri ve sınıfları kullanabilirsiniz.
Örneğin, yaşam döngüsüne duyarlı bir bileşen kullanarak cihazın konumunu ekranda görüntüleyebilirsiniz. Bu bileşen, parça etkinleştiğinde dinlemeyi otomatik olarak başlatabilir ve etkin olmayan bir duruma geçtiğinde durabilir.
Fragment
sınıfı, LifecycleObserver
kullanmaya alternatif olarak, bir parçanın yaşam döngüsündeki her bir değişikliğe karşılık gelen geri çağırma yöntemleri içerir. Bunlar arasında
onCreate()
,
onStart()
,
onResume()
,
onPause()
,
onStop()
ve
onDestroy()
yer alır.
Bir parçanın görünümünde, parçanın Lifecycle
öğesinden bağımsız olarak yönetilen ayrı bir Lifecycle
bulunur. Parçalarda kendi görünümleri için getViewLifecycleOwner()
veya getViewLifecycleOwnerLiveData()
kullanılarak erişilebilen bir LifecycleOwner
bulunur.
Görünümün Lifecycle
öğesine erişebilmek, Yaşam döngüsüne duyarlı bir bileşenin yalnızca ekranda görüntülenmesi amaçlanan LiveData
gözlemleme gibi bir parçanın görünümü varken işlem yapması gereken durumlarda yararlıdır.
Bu konu, Fragment
yaşam döngüsünü ayrıntılı olarak tartışarak bir parçanın yaşam döngüsü durumunu belirleyen kuralların bazılarını açıklar ve Lifecycle
durumları ile parça yaşam döngüsü geri çağırmaları arasındaki ilişkiyi gösterir.
Parçalar ve parça yöneticisi
Bir parça örneklendiğinde INITIALIZED
durumunda başlar. Bir parçanın yaşam döngüsünün geri kalanında geçişi için FragmentManager
'e eklenmesi gerekir. FragmentManager
, parçasının hangi durumda olması gerektiğini belirlemekten ve bu parçayı bu duruma taşımaktan sorumludur.
FragmentManager
, parça yaşam döngüsünün yanı sıra parçaları ana makine etkinliğine eklemekten ve parça artık kullanılmadığında bunları çıkarmaktan da sorumludur. Fragment
sınıfında, onAttach()
ve onDetach()
olmak üzere iki geri çağırma yöntemi bulunur. Bu yöntemlerden biri gerçekleştiğinde çalışma yapmak için bu yöntemleri geçersiz kılabilirsiniz.
onAttach()
, parça bir FragmentManager
öğesine eklendiğinde ve ana makine etkinliğine eklendiğinde çağrılır. Bu noktada parça aktiftir ve FragmentManager
, yaşam döngüsü durumunu yönetir. Bu noktada, findFragmentById()
gibi FragmentManager
yöntemleri bu parçayı döndürür.
onAttach()
her zaman Yaşam döngüsü durumu değişikliklerinden önce çağrılır.
Parça, bir FragmentManager
öğesinden kaldırıldığında ve ana makine etkinliğinden ayrıldığında onDetach()
geri çağırması çağrılır. Parça artık etkin değil ve artık findFragmentById()
kullanılarak alınamaz.
onDetach()
, her zaman Yaşam döngüsü durum değişikliklerinden sonra çağrılır.
Bu geri çağırmaların FragmentTransaction
attach()
ve detach()
yöntemleriyle ilgili olmadığını unutmayın.
Bu yöntemler hakkında daha fazla bilgi için Parça işlemleri bölümüne bakın.
Parça yaşam döngüsü durumları ve geri çağırmalar
FragmentManager
, bir parçanın yaşam döngüsü durumunu belirlerken aşağıdakileri dikkate alır:
- Bir parçanın maksimum durumu,
FragmentManager
tarafından belirlenir. Bir parça,FragmentManager
durumunun ötesine geçemez. FragmentTransaction
kapsamında,setMaxLifecycle()
kullanarak parça üzerinde maksimum yaşam döngüsü durumunu ayarlayabilirsiniz .- Bir parçanın yaşam döngüsü durumu hiçbir zaman üst öğesinden büyük olamaz. Örneğin, bir üst parça veya etkinlik, alt parçalarından önce başlatılmalıdır. Benzer şekilde, alt parçalar da üst parçalarından veya etkinliğinden önce durdurulmalıdır.
Şekil 1'de, parçanın her bir Lifecycle
durumu ve bu durumların hem parçanın yaşam döngüsü geri çağırmalarıyla hem de parçanın görünümü Lifecycle
ile nasıl ilişkili olduğu gösterilmiştir.
Bir parça, yaşam döngüsü boyunca ilerledikçe durumlarında yukarı ve aşağı hareket eder. Örneğin, arka yığının üst kısmına eklenen bir parça CREATED
konumundan STARTED
konumuna RESUMED
konumuna doğru yukarı doğru hareket eder. Buna karşılık, bir parça arka yığından çıkarıldığında bu durumlarda aşağı doğru ilerler ve RESUMED
konumundan STARTED
konumuna CREATED
ve son olarak da DESTROYED
konumuna gelir.
Yukarı durum geçişleri
Yaşam döngüsü durumlarında yukarı doğru ilerlerken bir parça, önce yeni durumu için ilişkili yaşam döngüsü geri çağırmasını çağırır. Bu geri çağırma sona erdiğinde, ilgili Lifecycle.Event
gözlemcilere parçanın Lifecycle
ile yayınlanır, ardından parça örneklenmişse parçanın görünümü Lifecycle
ile gösterilir.
Parça OLUŞTURULDU
Parçanız CREATED
durumuna ulaştığında FragmentManager
'a eklenir ve onAttach()
yöntemi zaten çağrılmıştır.
Burası, parçanın SavedStateRegistry
etiketi aracılığıyla parçanın kendisiyle ilişkili kayıtlı durumları geri yüklemek için uygun yerdir.
Parçanın görünümünün şu anda oluşturulmadığını ve parçanın görünümüyle ilişkilendirilmiş herhangi bir durumun yalnızca görünüm oluşturulduktan sonra geri yükleneceğini unutmayın.
Bu geçiş, onCreate()
geri çağırmasını çağırır. Geri çağırma, daha önce onSaveInstanceState()
tarafından kaydedilen durumları içeren bir savedInstanceState
Bundle
bağımsız değişkeni de alır.
savedInstanceState
öğesinin, parça ilk oluşturulduğunda null
değerine sahip olduğunu ancak onSaveInstanceState()
değerini geçersiz kılmasanız bile sonraki düzenlemeler için her zaman boş olmadığını unutmayın. Daha fazla ayrıntı için Parçalarla durum kaydetme bölümüne bakın.
Parça OLUŞTURULDU ve Görünüm BAŞLATILDI
Parçanın Lifecycle
görünümü yalnızca Fragment
öğeniz geçerli bir View
örneği sağladığında oluşturulur. Çoğu durumda, görünümü uygun zamanda otomatik olarak artıran bir @LayoutId
alan parça oluşturucuları kullanabilirsiniz. Ayrıca, parçanızın görünümünü programatik olarak genişletmek veya oluşturmak için onCreateView()
öğesini geçersiz kılabilirsiniz.
Parçanızın görünümü boş olmayan bir View
ile örneklenirse bu View
parçada ayarlanır ve getView()
kullanılarak alınabilir. Daha sonra getViewLifecycleOwnerLiveData()
, parçanın görünümüne karşılık gelen yeni INITIALIZED
LifecycleOwner
ile güncellenir. Yaşam döngüsü geri çağırması da bu aşamada onViewCreated()
olarak adlandırılmaktadır.
Bu, görünümünüzün ilk durumunu ayarlamak, geri çağırmaları parçanın görünümünü güncelleyen LiveData
örneklerini gözlemlemek ve parçanızın görünümündeki herhangi bir RecyclerView
veya ViewPager2
örneğinde bağdaştırıcı ayarlamak için uygun yerdir.
Parça ve Görünüm OLUŞTURULDU
Parçanın görünümü oluşturulduktan sonra, varsa önceki görünüm durumu geri yüklenir ve görünümün Lifecycle
öğesi daha sonra CREATED
durumuna taşınır. Görünüm yaşam döngüsü sahibi, ON_CREATE
etkinliğini gözlemcilerine de yayınlar. Burada, parçanın görünümüyle ilişkilendirilmiş tüm ek durumları geri yüklemeniz gerekir.
Bu geçiş, onViewStateRestored()
geri çağırmasını da çağırır.
Parça ve Görünüm BAŞLANGIÇ
Yaşam döngüsüne duyarlı bileşenleri bir parçanın STARTED
durumuna bağlamanız şiddetle önerilir. Bu durum, bir parça oluşturulmuşsa parçanın görünümünün kullanılabilir olmasını ve parçanın alt FragmentManager
öğesinde bir FragmentTransaction
işleminin güvenli olmasını garanti eder. Parçanın görünümü null değilse parçanın Lifecycle
görünümü STARTED
konumuna taşındıktan hemen sonra parçanın Lifecycle
görünümü STARTED
görünümüne taşınır.
Parça STARTED
haline geldiğinde onStart()
geri çağırması çağrılır.
Parça ve Görünüm DEVAM ETTİ
Parça görünür olduğunda tüm Animator
ve Transition
efektleri tamamlanmış ve parça kullanıcı etkileşimi için hazır hale gelir. Parçanın Lifecycle
özelliği RESUMED
durumuna taşınır ve onResume()
geri çağırma çağrılır.
RESUMED
öğesine geçiş, kullanıcının artık parçanızla etkileşimde bulunabileceğini belirtmek için uygun sinyaldir. RESUMED
olmayan parçalar görünümlerine manuel olarak odaklanmamalı veya giriş yöntemi görünürlüğünü işlemeye çalışmamalıdır.
Aşağı durum geçişleri
Bir parça daha düşük bir yaşam döngüsü durumuna doğru hareket ettiğinde ilgili Lifecycle.Event
, gözlemcilere parçanın örneklendirmesiyse Lifecycle
görünümü tarafından yayınlanır ve ardından parçanın Lifecycle
simgesi yayınlanır. Bir parçanın yaşam döngüsü etkinliği yayınlandıktan sonra, parça ilişkili yaşam döngüsü geri çağırma işlevini çağırır.
Parça ve Görünüm BAŞLANGIÇ
Kullanıcı, parçadan ayrılmaya başlayıp parça hâlâ görünürken parçanın ve görünümüne ait Lifecycle
öğeleri STARTED
durumuna geri taşınır ve ON_PAUSE
etkinliğini gözlemcilerine yayınlar. Parça daha sonra onPause()
geri çağırmasını çağırır.
Parça ve Görünüm OLUŞTURULDU
Parça artık görünür olmadığında, parça ve görünümü için Lifecycle
öğeleri CREATED
durumuna taşınır ve ON_STOP
etkinliğini gözlemcilerine yayınlar. Bu durum geçişi, durdurulan üst etkinlik veya parçanın yanı sıra üst etkinlik veya parça tarafından durumun kaydedilmesiyle de tetiklenir. Bu davranış, ON_STOP
etkinliğinin, parçanın durumu kaydedilmeden önce çağrılmasını garanti eder. Bu, ON_STOP
etkinliğini, alt FragmentManager
üzerinde FragmentTransaction
gerçekleştirmenin güvenli olduğu son nokta yapar.
Şekil 2'de gösterildiği gibi onStop()
geri çağırma işleminin sırası ve onSaveInstanceState()
ile durumun kaydedilmesi API düzeyine göre değişir. API 28'den önceki tüm API düzeyleri için onSaveInstanceState()
, onStop()
tarihinden önce çağrılır.
API düzeyleri 28 ve sonraki sürümler için çağrı sırası tersine çevrilir.
Parça OLUŞTURULDU ve Görünüm KALDIRILDI
Tüm çıkış animasyonları ve geçişleri tamamlandıktan ve parçanın görünümü pencereden ayrıldıktan sonra, parçanın görünümü Lifecycle
DESTROYED
durumuna taşınır ve ON_DESTROY
etkinliğini gözlemcilerine yayınlar. Daha sonra parça, onDestroyView()
geri çağırmasını çağırır. Bu noktada, parçanın görünümü kullanım ömrünün sonuna gelmiştir ve getViewLifecycleOwnerLiveData()
bir null
değeri döndürür.
Bu noktada, parçanın görünümüne yapılan tüm referanslar kaldırılarak, parçanın atık olarak toplanmasını sağlar.
Parça KALDIRILDI
Parça kaldırılırsa veya FragmentManager
kaldırılırsa parçanın Lifecycle
öğesi DESTROYED
durumuna taşınır ve ON_DESTROY
etkinliğini gözlemcilerine gönderir. Daha sonra parça, onDestroy()
geri çağırmasını çağırır. Bu noktada, parça yaşam döngüsünün sonuna ulaşmıştır.
Ek kaynaklar
Parça yaşam döngüsüyle ilgili daha fazla bilgi için aşağıdaki ek kaynakları inceleyin.