Sobes.tech
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
    }
}