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.