Sobes.tech
Junior — Middle

Μπορεί να υπάρχουν καταστάσεις όπου είναι απαραίτητο να διαγράψετε ισχυρούς συνδέσμους στον κώδικα, και ποιες είναι οι πιθανές αιτίες γι' αυτό;

sobes.tech AI

Απάντηση από AI

Οι ισχυρές αναφορές σε Android και Java δείχνουν σε αντικείμενα που δεν μπορούν να διαγραφούν από τον συλλέκτη απορριμμάτων όσο υπάρχουν τέτοιες αναφορές. Είναι απαραίτητο να διαγράψετε ή να ορίσετε σε null τις ισχυρές αναφορές στις ακόλουθες περιπτώσεις:

  • Αποφυγή διαρροών μνήμης. Για παράδειγμα, αν ένα αντικείμενο με ισχυρή αναφορά ζει περισσότερο από ό,τι πρέπει και διατηρεί μεγάλους πόρους (όπως το πλαίσιο Activity, View κ.λπ.), αυτό οδηγεί σε διαρροές.
  • Απελευθέρωση πόρων. Όταν ένα αντικείμενο δεν είναι πλέον απαραίτητο, η ρύθμιση των ισχυρών αναφορών σε null επιτρέπει στον συλλέκτη απορριμμάτων να ελευθερώσει μνήμη.
  • Αποφυγή κυκλικών εξαρτήσεων. Σε ορισμένες περιπτώσεις, τα αντικείμενα αναφέρονται το ένα στο άλλο, και χωρίς την αφαίρεση των ισχυρών αναφορών, ο συλλέκτης απορριμμάτων δεν θα μπορέσει να τα καθαρίσει.

Παράδειγμα: στο Android, συχνά ορίζουν σε null τις αναφορές σε Context ή Activity σε στατικά πεδία ή σε callbacks για να αποφύγουν διαρροές μνήμης κατά την αλλαγή διαμόρφωσης ή το κλείσιμο μιας Activity.