Sobes.tech
Junior

Hogyan tárolhatunk ideiglenesen egy objektumot az Androidban?

sobes.tech MI

Válasz az MI-től

Az Androidban különböző módokon lehet ideiglenesen objektumokat tárolni, a választás az életidejüktől és attól függ, hogy szükség van-e rájuk a komponens befejezése után:

  • View állapota: A View-hoz kapcsolódó objektumokat el lehet menteni a státuszába, amelyet a View újraalkotásakor (például képernyőforgatáskor) visszaállítanak. Az onSaveInstanceState() és az onRestoreInstanceState() használatos.
  • ViewModel: A legjobb módszer az UI-hoz kapcsolódó adatok mentésére, amelyeknek túl kell élniük az aktivitás/fragment konfigurációs változásait (például képernyőforgatásokat). A ViewModel addig létezik, amíg a ViewModelStoreOwner nincs megsemmisítve.
    // Az Activity/Fragment-ben
    val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
    
    // A ViewModel-ben
    class MyViewModel : ViewModel() {
        var myObject: MyData? = null
    }
    
  • onRetainCustomNonConfigurationInstance() (elavult): Metódus az Activity-ben, hogy tetszőleges objektumokat tároljon, amelyek túlélnek konfigurációs változásokat. Az objektum eléréséhez a getLastNonConfigurationInstance() használatos. Elavult, a ViewModel javára.
    // Az Activity-ben
    override fun onRetainCustomNonConfigurationInstance(): Any? {
        return myObjectToRetain
    }
    
    // Objektum elérése
    val retainedObject = lastCustomNonConfigurationInstance as? MyData
    
  • Application osztály: Olyan objektumok számára, amelyek az alkalmazás teljes életciklusán át élniük kell. Óvatosan kell használni, hogy ne tároljunk túl sok adatot.
  • Ideiglenes fájlok: Nagyobb objektumok számára, amelyek nem férnek közvetlenül a memóriába, vagy rövid távon a lemezen kell tárolni őket.
Módszer Életciklus ideje Használat
View állapota View élete + újraalkotás Kis adatok, amelyek a View-hoz kapcsolódnak
ViewModel Activity/Fragment élete UI adatok, amelyek túlélnek konfigurációs változásokat
onRetainCustomNonConfigurationInstance() Activity élete + változások Tetszőleges objektumok (elavult)
Application osztály Az alkalmazás élete Globális objektumok
Ideiglenes fájlok A fejlesztő által meghatározva Nagyobb objektumok, ideiglenes tárolás