Junior
Räägi mulle Jetpack ViewModelist.
sobes.tech AI
Vastus AI-lt
ViewModel hoiab ja juhib kasutajaliidese seotud andmeid, võttes arvesse elutsüklit. See jääb ellu konfiguratsioonimuutuste (ekraani pööramise, paigutuse muutmise) ajal, vältides andmete kaotsiminekut.
Peamised omadused:
- Andmete säilitamine: ViewModel ei hävine konfiguratsiooni muutmisel, säilitades kasutajaliidese oleku.
- Loogika eraldamine UI-st: Ärilogika asetatakse ViewModel-i, mis lihtsustab testimist ja hooldust Activity/Fragment.
- Integreerimine LiveData-ga: Kasutatakse sageli LiveData-ga andmete muutuste jälgimiseks.
Näide kasutamisest:
// MyViewModel.kt
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
// Andmed, mida tuleb säilitada konfiguratsioonimuutuste ajal
var counter = 0
}
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
private lateinit var counterText: TextView
private lateinit var incrementButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Saadakse ViewModel
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
counterText = findViewById(R.id.counter_text)
incrementButton = findViewById(R.id.increment_button)
// Näidata andmeid ViewModel-ist
updateCounterDisplay()
incrementButton.setOnClickListener {
viewModel.counter++
updateCounterDisplay()
}
}
private fun updateCounterDisplay() {
counterText.text = viewModel.counter.toString()
}
}
Elutsükkel: ViewModel elab nii kaua, kuni elab seotud Scope (nt Activity). Kui Scope lõpeb, hävitatakse ViewModel.
ViewModelProviders (praegu ViewModelProvider) kasutati enne Kotlin-i ViewModel-i eksemplari saamiseks. Kotlin-is soovitatakse kasutada ViewModelProvider(this).get(MyViewModel::class.java).
Peamised eelised UI-oleku hoidmise klasside ees:
- Püsimine konfiguratsioonimuutuste ajal.
- Juhtimine Jetpacki elutsükli raamistiku poolt.
Puudused:
- Võib muutuda liiga suureks keerulise UI-loogika korral.
- Ei tohi sisaldada viiteid View-ile, Context-ile või teistele elutsükli objektidele, et vältida mälulekkeid.