Sobes.tech
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? MyData
    
  • Application клас: За обекти, които трябва да живеят през целия жизнен цикъл на приложението. Трябва да се използва с внимание, за да не се съхранява прекалено много данни в него.
  • Временни файлове: За по-големи обекти, които не се побират директно в паметта или изискват съхранение за кратък срок на диска.
Метод Срок на живот Използване
Състояние на View Живот на View + повторно състояние Малки данни, свързани с View
ViewModel Живот на Activity/Fragment Данни за UI, преживяващи промени в конфигурацията
onRetainCustomNonConfigurationInstance() Живот на Activity + повторно състояние Произволни обекти (остарял)
Application клас Живот на приложението Глобални обекти
Временни файлове Определя разработчик Големи обекти, временна памет