Sobes.tech
Junior

Kā mēs varam pagaidu saglabāt objektu Android?

sobes.tech AI

Atbilde no AI

Laika objekta Android var būt paglabāt vairākos veidos, izvēle ir atkarīga no tā dzīves ilguma un nepieciešamības piekļūt tam pēc komponenta pabeigšanas:

  • View stāvoklis: Ar View saistītus objektus var saglabāt tā stāvoklī, kas tiek atjaunots, atkārtoti izveidojot View (piemēram, ekrāna apgriešanas laikā). Izmanto onSaveInstanceState() un onRestoreInstanceState().
  • ViewModel: Labākais veids, kā saglabāt ar UI saistītus datus, kas jāizdzīvo konfigurācijas izmaiņas (piemēram, ekrāna apgriešanu). ViewModel pastāv līdz brīdim, kad tiek iznīcināts ViewModelStoreOwner.
    // Activity/Fragment
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // `ViewModel` klasē
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (novecojis): metode Activity, lai saglabātu nejaušus objektus, kas izdzīvos konfigurācijas izmaiņas. getLastNonConfigurationInstance() tiek izmantots, lai iegūtu objektu. Novecojis, aizstāts ar ViewModel.
    // Activity
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Objekta iegūšana
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Application klase: priekš objektiem, kuriem jādzīvo visa lietojumprogrammas dzīves cikla laikā. Jābūt uzmanīgiem, lai tajā nesaglabātu pārāk daudz datu.
  • Laika faili: lielākiem objektiem, kas neiederas tieši atmiņā vai prasa īslaicīgu saglabāšanu diskā.
Metode Dzīves ilgums Lietošana
View stāvoklis Dzīves ilgums + atkārtots atjaunošana Mazs datu apjoms, kas saistīts ar View
ViewModel Dzīves ilgums Activity/Fragment UI dati, kas izdzīvos konfigurācijas izmaiņas
onRetainCustomNonConfigurationInstance() Dzīves ilgums Activity + atkārtots atjaunošana Nejauši objekti (novecojis)
Application klase Dzīves ilgums lietojumprogrammai Globāli objekti
Laika faili Izvēlas izstrādātājs Lieli objekti, pagaidu glabāšana