Sobes.tech
Junior

Jetpack ViewModel жөнүндө айтып бер.

sobes.tech AI

AIден жооп

ViewModel UI-байланыштуу маалыматтарды сактап, башкаруу үчүн колдонулат жана анын жашоо циклин эске алат. Ал конфигурация өзгөрүүлөрүнөн (экранын айлануу, жайгаштыруу өзгөрүүлөрү) кийин да жашайт, маалыматты жоготпойт.

Негизги өзгөчөлүктөрү:

  • Маалыматты сактоо: ViewModel конфигурация өзгөргөндө жок кылынбайт, UI абалын сактайт.
  • Логиканы UIдан ажыратуу: Бизнес-логика ViewModelге жайгаштырылган, бул Activity/Fragmentтин тестирлөө жана колдоо иштерин жеңилдетет.
  • LiveData менен интеграция: Маалыматтагы өзгөрүүлөрдү көзөмөлдөө үчүн көбүнчө колдонулат.

Колдонуу мисалы:

// MyViewModel.kt
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
    // Конфигурация өзгөргөндө сакталуучу маалыматтар
    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)

        // ViewModel алуу
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

        counterText = findViewById(R.id.counter_text)
        incrementButton = findViewById(R.id.increment_button)

        // Маалыматты көрсөтүү
        updateCounterDisplay()

        incrementButton.setOnClickListener {
            viewModel.counter++
            updateCounterDisplay()
        }
    }

    private fun updateCounterDisplay() {
        counterText.text = viewModel.counter.toString()
    }
}

Өмүрү: ViewModel байланышкан Scope (мисалы, Activity) жашаганга чейин жашайт. Scope аяктагандан кийин, ViewModel жок кылынат.

ViewModelProviders (азыркы учурда ViewModelProvider) Kotlin чыкканга чейин колдонулчу. Kotlinда ViewModelProvider(this).get(MyViewModel::class.java) колдонуу сунушталат.

Артыкчылыктары:

  • Конфигурация өзгөрүүлөрүнөн өтө алат.
  • Jetpackдин жашоо циклинин рамкасы тарабынан башкарылат.

Кемчиликтери:

  • Кыйын UI логикасы болсо, өтө чоң болуп калышы мүмкүн.
  • View, Context же башка жашоо цикли менен байланышкан объекттерге шилтемелерди камтыбоого тийиш, эгерде эс тутумду агызуудан сактануу үчүн.