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 же башка жашоо цикли менен байланышкан объекттерге шилтемелерди камтыбоого тийиш, эгерде эс тутумду агызуудан сактануу үчүн.