Sobes.tech
Junior

Kaip laikinai išsaugoti objektą Android?

sobes.tech AI

Atsakymas iš AI

Laikinai išsaugoti objektą Android galima keliais būdais, pasirinkimas priklauso nuo jo gyvavimo trukmės ir poreikio prieiti prie jo po komponento užbaigimo:

  • View būsenos: Susiję su View objektai gali būti saugomi jo būsenoje, kuri atstatoma pakartotinai kuriant View (pavyzdžiui, ekrano pasukimo metu). Naudojama onSaveInstanceState() ir onRestoreInstanceState().
  • ViewModel: Geriausias būdas išsaugoti su UI susijusius duomenis, kurie turi išlikti keičiant konfigūraciją (pavyzdžiui, ekrano pasukimo metu). ViewModel egzistuoja iki kol yra sunaikinamas ViewModelStoreOwner.
    // Activity/Fragment
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // `ViewModel` klasėje
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (pasenęs): metodas Activity, skirtas išsaugoti bet kokius objektus, kurie išliks keičiant konfigūraciją. getLastNonConfigurationInstance() naudojamas gauti objektą. Pasenęs, pakeistas ViewModel.
    // Activity
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Objekto gavimas
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Application klasė: skirta objektams, kurie turi būti gyvi viso programos gyvavimo metu. Reikia būti atsargiems, kad joje nesaugoti per daug duomenų.
  • Laikini failai: didesniems objektams, kurie netelpa tiesiogiai atmintyje arba reikalauja laikino saugojimo diske.
Metodas Gyvavimo trukmė Naudojimas
View būsenos Gyvavimo trukmė + pakartotinis atstatymas Maži duomenys, susiję su View
ViewModel Gyvavimo trukmė Activity/Fragment UI duomenys, kurie išlieka keičiant konfigūraciją
onRetainCustomNonConfigurationInstance() Gyvavimo trukmė Activity + pakartotinis atstatymas Bet kokie objektai (pasenę)
Application klasė Gyvavimo trukmė programos Globalūs objektai
Laikini failai Nustato kūrėjas Dideli objektai, laikinas saugojimas