Sobes.tech
Junior — Middle

რა განსხვავებაა მონაცემების შენახვას ViewModel-ში და გამოყენებას onSaveInstanceState მეთოდის პროგრამის მდგომარეობის შენახვისთვის?

sobes.tech AI

პასუხი AI-სგან

ViewModel და onSaveInstanceState სერვისია მდგომარეობის შენახვისთვის, მაგრამ ისინი განსხვავებულად მუშაობენ და სხვადასხვა მიზნებისთვის განკუთვნილია.

  • ViewModel ინახავს მონაცემებს მეხსიერებაში, რომელიც დაკავშირებულია Activity ან Fragment-ის სიცოცხლის ციკლთან. იგი გადარჩება ეკრანის ბრუნვისა და სხვა კონფიგურაციის ცვლილებების დროს, შენარჩუნებული მონაცემებით, რომელიც არ საჭიროებს ხელახლა დატვირთვას. თუმცა, როდესაც აპლიკაციის პროცესი სრულად იხურება (მაგალითად, მეხსიერების ნაკლებობის გამო), ViewModel-ის მონაცემები იკარგება.

  • onSaveInstanceState ინახავს მცირე მონაცემებს Bundle ობიექტში, რომელიც სერილიზდება და სისტემამ აღადგენს მას პროცესის დახურვის შემდეგ, როდესაც Activity ხელახლა იქმნება. ეს მეთოდი შესაფერისია მარტივი და მცირე მონაცემებისთვის (მაგალითად, UI-ის მდგომარეობა), მაგრამ არა დიდი მოცულობის ან რთული ობიექტებისთვის.

მაგალითი:

class MyViewModel : ViewModel() {
    var userData: String? = null
}

// Activity-ში
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

// onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("key", "value")
}

// აღდგენა onCreate-ში
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

საჯამო:

  • გამოიყენეთ ViewModel მონაცემებისთვის, რომლებიც უნდა გადარჩეს ეკრანის ბრუნვის დროს.
  • გამოიყენეთ onSaveInstanceState მდგომარეობის შენახვისთვის, რომელიც გსურთ აღადგინოთ სრული Activity ან პროცესის განადგურების შემდეგ.