Junior
Ինչ կարող եք ասել Android-ի Activity-ի կյանքի ցիկլի մասին?
sobes.tech AI
Պատասխան AI-ից
Կյանքի ցիկլը Activity — դա վիճակների հավաքածու է և անցումները դրանց միջև, որոնցով անցնում է յուրաքանչյուր Activity օրինակը ստեղծումից մինչև ոչնչացում։ Այն սահմանվում է callback մեթոդների հավաքածուով։
Հիմնական callback մեթոդները կյանքի ցիկլում՝
onCreate(): Կոչվում է առաջին անգամActivityստեղծելիս։ Այստեղ տեղի է ունենում UI-ի ինիցիալիզացիա, տվյալների կապում և այլ միանգամյա գործողություններ։onStart(): Կոչվում է, երբActivityդառնում է տեսանելի օգտվողին, բայց դեռ չի ստացել ֆոկուսը։onResume(): Կոչվում է, երբActivityստանում է ֆոկուս և դառնում է ակտիվ։ Այստեղ սովորաբար սկսվում են անիմացիաները և այլ ինտերակտիվ գործողություններ։onPause(): Կոչվում է, երբActivityկորցնում է ֆոկուս, բայց դեռ տեսանելի է (օրինակ՝ թափանցիկ դիալոգային պատուհան վերևում)։ Այստեղ պետք է կանգնեցնել ռեսուրսներ պահանջող գործողությունները։onStop(): Կոչվում է, երբActivityայլևս չի տեսանելի օգտվողին։ Այստեղ պահվում են չփոխանցված տվյալները և ազատվում ռեսուրսները, որոնք այլևս չեն անհրաժեշտ։onDestroy(): Կոչվում է նախքանActivityոչնչացումը։ Այստեղ ազատվում են բոլոր մնացած ռեսուրսները։onRestart(): Կոչվում էonStop()-ից հետո՝ կրկին ցուցադրելու համար։ Դրանից հետո հաջորդում էonStart()։
Գրաֆիկորեն, կյանքի ցիկլը կարելի է ներկայացնել այնպես՝
Created -> Started -> Resumed -> Paused -> Stopped -> Destroyed
Կան նաև անցումներ՝
- Created -> Started (
onStart()-ից հետո) - Started -> Resumed (
onResume()-ից հետո) - Resumed -> Paused (երբ կորցնում է ֆոկուս)
- Paused -> Resumed (երբ ստանում է ֆոկուսը վերադառնալով)
- Paused -> Stopped (երբ լրիվ թաքնվում է)
- Stopped -> Destroyed (գործողության ավարտին)
- Stopped -> Restarted -> Started (
onRestart()-ից հետո)
Կարևոր է ճիշտ կառավարել Activity-ի վիճակը այս callback-ներում, որպեսզի խուսափել հիշողության լիքներից և ապահովել հավելվածի ճիշտ գործելակերպը կոնֆիգուրացիայի փոփոխության կամ Activity-ների միջև անցումների ժամանակ։ Ստորև ներկայացված է onSaveInstanceState()-ի օգտագործման օրինակ՝
// Վիճակի պահպանում
override fun onSaveInstanceState(outState: Bundle) {
outState.putString("my_data", "some_value")
super.onSaveInstanceState(outState)
}
// Վիճակի վերականգնում
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
if (savedInstanceState != null) {
val myData = savedInstanceState.getString("my_data")
// Օգտագործել myData
}
}