Junior
Как можем временно да запазим обект в Android?
sobes.tech AI
Отговор от AI
Временна запазване на обект в Android може да се осъществи по няколко начина, изборът зависи от неговия срок на живот и необходимостта от достъп след приключване на компонента:
- Състояние на View: Свързаните с View обекти могат да се запазват в неговото състояние, което се възстановява при повторно създаване на View (например при завъртане на екрана). Използва се
onSaveInstanceState()иonRestoreInstanceState(). ViewModel: Най-добрият начин за запазване на данни, свързани с UI, които трябва да преживеят промени в конфигурацията на Activity/Fragment (например завъртане на екрана).ViewModelсъществува до унищожаването на ViewModelStoreOwner.// В Activity/Fragment val viewModel = ViewModelProvider(this).get(MyViewModel::class.java) // В ViewModel class MyViewModel : ViewModel() { var myObject: MyData? = null }onRetainCustomNonConfigurationInstance()(остарял): Метод в Activity за запазване на произволни обекти, които ще преживеят промяна в конфигурацията.getLastNonConfigurationInstance()се използва за получаване на обекта. Остарял е в полза наViewModel.// В Activity override fun onRetainCustomNonConfigurationInstance(): Any? { return myObjectToRetain } // Получаване на обекта val retainedObject = lastCustomNonConfigurationInstance as? MyDataApplicationклас: За обекти, които трябва да живеят през целия жизнен цикъл на приложението. Трябва да се използва с внимание, за да не се съхранява прекалено много данни в него.- Временни файлове: За по-големи обекти, които не се побират директно в паметта или изискват съхранение за кратък срок на диска.
| Метод | Срок на живот | Използване |
|---|---|---|
| Състояние на View | Живот на View + повторно състояние | Малки данни, свързани с View |
| ViewModel | Живот на Activity/Fragment | Данни за UI, преживяващи промени в конфигурацията |
| onRetainCustomNonConfigurationInstance() | Живот на Activity + повторно състояние | Произволни обекти (остарял) |
| Application клас | Живот на приложението | Глобални обекти |
| Временни файлове | Определя разработчик | Големи обекти, временна памет |