რა განსხვავებაა მონაცემების შენახვას 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 ან პროცესის განადგურების შემდეგ.