Sobes.tech
Middle

Ποια είναι η ιδιαιτερότητα της αλλαγής θέσεων στην πλατφόρμα Android;

sobes.tech AI

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

Κατά την αλλαγή θέσεων (π.χ. περιστροφή οθόνης ή άλλες αλλαγές διαμόρφωσης) στο Android, η τρέχουσα δραστηριότητα καταστρέφεται και δημιουργείται μια νέα.

Τι συμβαίνει:

  • Καλούνται οι κύκλοι ζωής της παλιάς δραστηριότητας: onPause(), onStop(), onDestroy().
  • Η παλιά δραστηριότητα αφαιρείται από τη μνήμη.
  • Δημιουργείται μια νέα δραστηριότητα.
  • Καλούνται οι κύκλοι ζωής της νέας δραστηριότητας: onCreate(), onStart(), onResume().

Ειδικά για QA:

  • Απώλεια δεδομένων: Μη αποθηκευμένα δεδομένα στα πεδία εισαγωγής, επιλεγμένα στοιχεία λίστας κ.λπ. μπορεί να χαθούν αν δεν υλοποιηθεί η διατήρησή τους.
  • Κατάσταση UI: Η ορατότητα των στοιχείων, η θέση κύλισης, οι επιλεγμένες καρτέλες και άλλες καταστάσεις UI μπορεί να επαναφερθούν στην προεπιλογή.
  • Παρασκηνιακές λειτουργίες: Οι εκτελούμενες εργασίες στο παρασκήνιο (π.χ. φόρτωση δεδομένων) μπορεί να διακοπούν ή να ολοκληρωθούν λανθασμένα.
  • Απόδοση: Πολλαπλές αλλαγές διαμόρφωσης μπορεί να επιβραδύνουν την εφαρμογή λόγω συνεχούς αναδημιουργίας της δραστηριότητας.
  • Διαρροές μνήμης: Λανθασμένη διαχείριση πόρων (π.χ. Listener'ς, που δεν αποσυνδέονται στο onDestroy()) μπορεί να οδηγήσει σε διαρροές μνήμης.

Πώς διαχειρίζονται από τους προγραμματιστές (και τι πρέπει να ελέγξει το QA):

  • Αποθήκευση κατάστασης: Χρήση onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Παράδειγμα αποθήκευσης δεδομένων στο onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Παράδειγμα ανάκτησης δεδομένων στο onCreate()
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (savedInstanceState != null) {
            String savedText = savedInstanceState.getString("saved_text");
            if (savedText != null) {
                myEditText.setText(savedText);
            }
        }
    }
    
  • Διαχείριση αλλαγών διαμόρφωσης: Δήλωση android:configChanges στο AndroidManifest.xml για περιπτώσεις όπου δεν απαιτείται αναδημιουργία της δραστηριότητας (λιγότερο συνηθισμένο σενάριο, αλλά χρησιμοποιείται για άλλες αλλαγές διαμόρφωσης).
  • Κύκλος ζωής ViewModel: Το ViewModel διατηρεί την κατάσταση του κατά τη διάρκεια αλλαγής διαμόρφωσης και δεν καταστρέφεται μαζί με τη δραστηριότητα.
  • Fragments: Ορθή διαχείριση του κύκλου ζωής των Fragments.

Δοκιμές για την αλλαγή θέσεων:

  • Προσομοίωση περιστροφής οθόνης σε διαφορετικές συσκευές και εξομοιωτές.
  • Έλεγχος αποθήκευσης και ανάκτησης δεδομένων μετά την αλλαγή θέσης.
  • Έλεγχος κατάστασης UI (ορατότητα, κείμενο, κύλιση, επιλεγμένα στοιχεία).
  • Δοκιμή διακοπής/συνέχισης εργασιών στο παρασκήνιο.
  • Έλεγχος διαρροών μνήμης (χρήση Android Profiler).
  • Stress testing: πολλαπλές γρήγορες αλλαγές θέσης.

Εργαλεία για QA:

  • Android Studio (για αποσφαλμάτωση, προβολή logs, χρήση Profiler).
  • adb εντολές για προσομοίωση περιστροφών.
  • Διάφοροι εξομοιωτές και πραγματικές συσκευές με διαφορετικές αναλύσεις και εκδόσεις Android.