Sobes.tech
Junior

Kuidas saame Androidis ajutiselt objekti salvestada?

sobes.tech AI

Vastus AI-lt

Ajutiselt objekti Androidis saab salvestada mitmel viisil, valik sõltub selle elueast ja vajadusest sellele ligi pääseda pärast komponendi lõpetamist:

  • Vaate olek: Seotud objektid Vaatega saab salvestada selle olekusse, mis taastatakse uuesti Vaate loomisel (näiteks ekraani pööramisel). Kasutatakse onSaveInstanceState() ja onRestoreInstanceState().
  • ViewModel: Parim viis UI-ga seotud andmete salvestamiseks, mis peavad üle elama konfiguratsiooni muutused (näiteks ekraani pööramine). ViewModel eksisteerib kuni ViewModelStoreOwner hävitamiseni.
    // Activity/Fragment
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // `ViewModel` klassis
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (vananenud): meetod Activitys, mis võimaldab salvestada juhuslikke objekte, mis jäävad konfiguratsiooni muutuste ajal. getLastNonConfigurationInstance() kasutatakse objekti saamiseks. Vananenud, asendatud ViewModel-iga.
    // Activitys
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Objekti saamine
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Application klass: objektide jaoks, mis peavad kestma kogu rakenduse elutsükli jooksul. Tuleb olla ettevaatlik, et selles ei hoitaks liiga palju andmeid.
  • Ajutised failid: suuremate objektide jaoks, mis ei mahu otse mälu või vajavad lühiajalist salvestamist kettale.
Meetod Eluea pikkus Kasutamine
Vaate olek Elu Vaate + taasteolek Väikesed andmed, mis on seotud Vaatega
ViewModel Elu Activity/Fragment UI andmed, mis jäävad konfiguratsiooni muutuste ajal
onRetainCustomNonConfigurationInstance() Elu Activity + taasteolek Juhuslikud objektid (vananenud)
Application klass Rakenduse eluiga Globaalne objektid
Ajutised failid Arendaja otsustada Suuremad objektid, ajutine salvestus