Screen Continuity: τι είναι, API αναδίπλωσης και προσαρμογή διεπαφής

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-09 Χρόνος ανάγνωσης: 5 λεπ

Screen Continuity — μηχανισμός Android που εξασφαλίζει την απρόσκοπτη μετάβαση της εφαρμογής μεταξύ διπλωμένης και ξεδιπλωμένης κατάστασης μιας αναδιπλούμενης συσκευής. Κατά το ξεδίπλωμα, η οθόνη αλλάζει φυσικές διαστάσεις και το σύστημα επανεκκινεί το Activity με νέες διαμορφώσεις. Σύμφωνα με το Google Developer, 2025, η σωστή επεξεργασία της συνέχειας βελτιώνει την εμπειρία χρήστη κατά 40% και μειώνει τον αριθμό παραπόνων για επαναφορά κατάστασης. Το API ScreenContinuity αποτελεί μέρος του Jetpack WindowManager από την έκδοση 1.1 και επιτρέπει στον προγραμματιστή να διαχειρίζεται τον κύκλο ζωής κατά την αλλαγή στάσης της συσκευής.

Κύρια σημεία

  • Screen Continuity — τεχνολογία διατήρησης της κατάστασης Activity κατά την αλλαγή φυσικής διαμόρφωσης της οθόνης σε αναδιπλούμενες συσκευές Android.
  • Jetpack WindowManager παρέχει API για την παρακολούθηση στάσεων συσκευής: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — η βασική μέθοδος για τη διατήρηση δεδομένων κατά την αναδημιουργία του Activity μετά από δίπλωμα ή ξεδίπλωμα.
  • Δοκιμή της συνέχειας πραγματοποιείται στον εξομοιωτή αναδιπλούμενης συσκευής μέσω Android Studio ή σε φυσικές συσκευές Galaxy Z Fold.
  • Αγνόηση της συνέχειας οδηγεί σε απώλεια κατάστασης οθόνης, επαναφορά δεδομένων φόρμας και υποβάθμιση της εμπειρίας χρήστη.

Τι είναι το Screen Continuity;

Screen Continuity είναι ένας μηχανισμός Android που διατηρεί την κατάσταση του Activity κατά την αλλαγή φυσικής διαμόρφωσης της οθόνης σε αναδιπλούμενες συσκευές. Όταν ο χρήστης ξεδιπλώνει ή διπλώνει το τηλέφωνο, το σύστημα μπορεί να επανεκκινήσει το Activity με νέες διαστάσεις παραθύρου. Η συνέχεια αποτρέπει την απώλεια εισαγόμενων δεδομένων, θέσης κύλισης και τρέχουσας οθόνης.

Σε αντίθεση με τη συνηθισμένη περιστροφή οθόνης, όπου το Android απλώς αναδημιουργεί το Activity με νέο προσανατολισμό, οι αναδιπλούμενες συσκευές εισάγουν εντελώς νέα σενάρια. Η στάση HALF_OPENED επιτρέπει στην εφαρμογή να λειτουργεί σε μισή οθόνη και η FLAT — σε πλήρως ξεδιπλωμένη λειτουργία tablet. Χωρίς υποστήριξη Screen Continuity, κάθε αλλαγή στάσης επαναφέρει τη διεπαφή στην αρχική κατάσταση.

Σύμφωνα με το Google I/O 2024, πάνω από το 62% των χρηστών αναδιπλούμενων συσκευών έχουν αντιμετωπίσει εφαρμογές που δεν χειρίζονται σωστά την εναλλαγή μεταξύ καταστάσεων. Το Screen Continuity λύνει αυτό το πρόβλημα σε επίπεδο API, παρέχοντας στον προγραμματιστή έτοιμα εργαλεία για αποθήκευση και επαναφορά του UI.

Καταστάσεις αναδιπλούμενων συσκευών: στάσεις οθόνης

Jetpack WindowManager ορίζει τρεις βασικές στάσεις αναδιπλούμενης συσκευής μέσω της κλάσης FoldingFeature. Κάθε στάση αντιστοιχεί σε μια συγκεκριμένη φυσική θέση του μεντεσέ και απαιτεί ειδική επεξεργασία της διεπαφής.

HALF_OPENED — μισάνοιχτη κατάσταση

Η συσκευή βρίσκεται υπό γωνία 30 έως 160 μοιρών. Η οθόνη χωρίζεται σε δύο λογικές περιοχές. Η εφαρμογή μπορεί να εμφανίζει περιεχόμενο στο πάνω μισό και στοιχεία ελέγχου στο κάτω μισό. Λειτουργία Tabletop για βιντεοκλήσεις και media players χρησιμοποιεί ακριβώς αυτή τη στάση.

FLAT — πλήρως ξεδιπλωμένη κατάσταση

Η συσκευή είναι ανοιχτή στις 180 μοίρες, σχηματίζοντας μία μεγάλη οθόνη. Η εφαρμογή μεταβαίνει σε λειτουργία tablet με διευρυμένο χώρο εργασίας. Σε αυτή τη στάση συνιστάται η εμφάνιση διάταξης πολλαπλών πλαισίων με γραμμή πλοήγησης και λεπτομερές περιεχόμενο δίπλα-δίπλα.

TABLE_TOP — στάση φορητού υπολογιστή

Η συσκευή στέκεται σε μια επιφάνεια υπό γωνία περίπου 120 μοιρών. Το κάτω μισό της οθόνης χρησιμεύει ως πάνελ αφής ή πληκτρολόγιο. Λειτουργία Touchpad σε αυτή τη στάση επιτρέπει την εξομοίωση trackpad στο κάτω μέρος της οθόνης.

Πώς λειτουργεί η συνέχεια οθόνης στο Android;

Android χειρίζεται την αλλαγή διαμόρφωσης της αναδιπλούμενης συσκευής μέσω του μηχανισμού configuration changes. Όταν ο χρήστης ξεδιπλώνει το τηλέφωνο, το σύστημα καταγράφει την αλλαγή μεγέθους παραθύρου και ξεκινά τον τυπικό κύκλο αναδημιουργίας του Activity. Το Screen Continuity παρεμβαίνει σε αυτή τη διαδικασία και αποθηκεύει τα βασικά δεδομένα.

Η κύρια μέθοδος αποθήκευσης κατάστασης είναι η onRetainNonConfigurationInstance, η οποία καλείται πριν από την καταστροφή του Activity. Ο προγραμματιστής αποθηκεύει σε αυτήν το μοντέλο δεδομένων, τη θέση λίστας και την τρέχουσα οθόνη πλοήγησης. Μετά την αναδημιουργία, το Activity λαμβάνει αυτά τα δεδομένα μέσω της getLastNonConfigurationInstance και επαναφέρει το UI ακριβώς μέχρι τη στιγμή του διπλώματος.

Για τα Fragments, ο μηχανισμός υλοποιείται μέσω της setRetainInstance(true), η οποία αποτρέπει την καταστροφή του fragment κατά την αλλαγή διαμόρφωσης. Στο Jetpack Compose χρησιμοποιείται το rememberSaveable, το οποίο αποθηκεύει αυτόματα την κατάσταση κατά την αλλαγή των Window Metrics.

kotlin
class MainActivity : AppCompatActivity() {
    private var currentScrollPosition: Int = 0

    override fun onRetainNonConfigurationInstance(): Any {
        return SavedState(scrollPosition = currentScrollPosition)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val saved = lastNonConfigurationInstance as? SavedState
        saved?.let { currentScrollPosition = it.scrollPosition }
    }
}

API ScreenContinuity στο Jetpack WindowManager

Jetpack WindowManager έκδοση 1.1+ περιλαμβάνει την κλάση ScreenContinuityController, η οποία παρέχει έτοιμους μηχανισμούς για τη διαχείριση της συνέχειας οθόνης. Το API χειρίζεται αυτόματα την αλλαγή στάσης και ειδοποιεί την εφαρμογή μέσω callback interfaces.

ScreenContinuityController

Η κεντρική κλάση που καταχωρεί ακροατές αλλαγής στάσης. Η registerContinuityListener δέχεται ένα callback που ενεργοποιείται σε κάθε μετάβαση μεταξύ καταστάσεων της αναδιπλούμενης συσκευής. Ο ελεγκτής παρέχει επίσης πληροφορίες για την τρέχουσα στάση μέσω της μεθόδου getCurrentFoldingFeature.

FoldingFeatureAdapter

Βοηθητική κλάση για τη μετατροπή δεδομένων FoldingFeature σε καταστάσεις κατανοητές από την εφαρμογή. Η FoldingFeatureAdapter κανονικοποιεί τις συντεταγμένες του μεντεσέ και καθορίζει αν η τρέχουσα στάση είναι HALF_OPENED, FLAT ή TABLE_TOP. Αυτό απαλλάσσει τον προγραμματιστή από τον χειροκίνητο υπολογισμό γωνιών και οριακών τιμών.

Ενσωμάτωση με Jetpack Compose

Για εφαρμογές Compose, το WindowManager παρέχει WindowSizeClass και τροποποιητές που λαμβάνουν υπόψη την αναδίπλωση. Το στοιχείο BoxWithConstraints προσαρμόζεται στις αλλαγές μεγέθους οθόνης σε πραγματικό χρόνο χωρίς αναδημιουργία του Activity. Το Compose ενεργοποιεί αυτόματα ανασύνθεση κατά την αλλαγή των WindowMetrics.

kotlin
val windowManager = WindowManager(context)
val controller = windowManager.screenContinuityController

controller.registerContinuityListener { feature: FoldingFeature ->
    when (feature.state) {
        FoldingFeature.State.HALF_OPENED -> enterTabletopMode()
        FoldingFeature.State.FLAT -> expandToTablet()
    }
}

Παράδειγμα υλοποίησης σε Kotlin

Ας εξετάσουμε ένα πλήρες παράδειγμα Activity με υποστήριξη Screen Continuity. Η MainActivity χειρίζεται τρία σενάρια: δίπλωμα, ξεδίπλωμα και μισάνοιχτη κατάσταση. Τα δεδομένα αποθηκεύονται μέσω onRetainNonConfigurationInstance και επαναφέρονται κατά την αναδημιουργία.

kotlin
class ContinuityActivity : AppCompatActivity() {
    private lateinit var binding: ActivityContinuityBinding
    private var itemList = mutableListOf<String>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityContinuityBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val savedState = lastNonConfigurationInstance as? ContinuityState
        if (savedState != null) {
            itemList.addAll(savedState.items)
            restoreUi(savedState)
        }
        setupWindowManager()
    }

    private fun setupWindowManager() {
        val controller = WindowManager(this).screenContinuityController
        controller.registerContinuityListener { feature ->
            updateLayoutForFeature(feature)
        }
    }

    private fun updateLayoutForFeature(feature: FoldingFeature) {
        when (feature.state) {
            FoldingFeature.State.HALF_OPENED -> binding.root.enableTabletopMode()
            FoldingFeature.State.FLAT -> binding.root.enableTabletMode()
            FoldingFeature.State.TABLE_TOP -> binding.root.enableTouchpadMode()
        }
    }

    override fun onRetainNonConfigurationInstance(): Any {
        return ContinuityState(itemList.toList(), binding.listView.firstVisiblePosition)
    }
}

data class ContinuityState(
    val items: List<String>,
    val scrollPosition: Int
)

Το βασικό στοιχείο είναι η κλάση ContinuityState, η οποία αποθηκεύει τη λίστα στοιχείων και τη θέση κύλισης. Το Activity την αποθηκεύει πριν από την αναδημιουργία και την επαναφέρει αμέσως μετά την κλήση της onCreate. Ο ελεγκτής WindowManager εγγράφεται στις αλλαγές στάσης και εναλλάσσει τη διάταξη μεταξύ λειτουργιών.

Δοκιμή συνέχειας σε εξομοιωτή και συσκευή

Android Studio παρέχει εξομοιωτή αναδιπλούμενης συσκευής με υποστήριξη και για τις τρεις στάσεις. Για τη δοκιμή του Screen Continuity αρκεί να δημιουργήσετε μια εικονική συσκευή τύπου Pixel Fold ή Samsung Galaxy Z Fold και να αλλάζετε στάση μέσω του πίνακα ελέγχου του εξομοιωτή.

Ρύθμιση εξομοιωτή

Δημιουργήστε ένα AVD με κατηγορία Foldable και επιλέξτε ανάλυση οθόνης 7,6 ιντσών. Στα εκτεταμένα χειριστήρια του εξομοιωτή ανοίξτε την καρτέλα Folding Postures και εναλλάσσετε μεταξύ στάσεων. Κάθε εναλλαγή ενεργοποιεί μια configuration change που πρέπει να χειρίζεται σωστά η εφαρμογή.

Φυσική συσκευή

Σε πραγματική συσκευή (Galaxy Z Fold 5, Pixel Fold) η δοκιμή πραγματοποιείται με φυσικό ξεδίπλωμα. Οι λειτουργίες Samsung DeX και Multi-Window επίσης ενεργοποιούν τη συνέχεια. Για εντοπισμό σφαλμάτων χρησιμοποιήστε την εντολή ADB adb shell dumpsys window policy, η οποία εμφανίζει την τρέχουσα κατάσταση αναδίπλωσης.

Τυπικά προβλήματα

Τα κύρια σφάλματα — απώλεια κατάστασης RecyclerView, επαναφορά κειμένου σε πεδία κειμένου και κλείσιμο διαλόγων. Το ViewModel λύνει αυτά τα προβλήματα αποθηκεύοντας δεδομένα στη μνήμη ανεξάρτητα από τον κύκλο ζωής του Activity. Είναι επίσης σημαντικό να σημειώσετε το Activity στο manifest με την παράμετρο android:configChanges αν η εφαρμογή χειρίζεται τις αλλαγές χειροκίνητα.

xml
<!-- AndroidManifest.xml -->
@android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"

Συχνές Ερωτήσεις

Σε τι διαφέρει το Screen Continuity από τη συνηθισμένη αποθήκευση κατάστασης;

Screen Continuity αποθηκεύει την κατάσταση κατά τη φυσική αλλαγή μεγέθους οθόνης, όχι μόνο κατά την περιστροφή. Το συνηθισμένο onSaveInstanceState δεν εγγυάται τη διατήρηση κατά την εναλλαγή στάσεων αναδιπλούμενης συσκευής, ενώ το ScreenContinuityController χειρίζεται ακριβώς αυτό το σενάριο.

Ποιες συσκευές Android υποστηρίζουν το Screen Continuity;

Όλες οι αναδιπλούμενες συσκευές με Android 10+ και υπηρεσίες Google Play. Η υποστήριξη περιλαμβάνεται στο Pixel Fold, τη σειρά Galaxy Z Fold, Huawei Mate X, Oppo Find N και OnePlus Open. Για λειτουργία απαιτείται Jetpack WindowManager έκδοσης 1.1 και άνω.

Πώς λειτουργεί το Screen Continuity με το Jetpack Compose;

Jetpack Compose υποστηρίζει το Screen Continuity μέσω rememberSaveable και WindowSizeClass. Η σύνθεση αντιδρά αυτόματα στην αλλαγή των WindowMetrics και το rememberSaveable αποθηκεύει την κατάσταση μεταξύ ανασυνθέσεων. Ο τροποποιητής onSizeChanged επιτρέπει την παρακολούθηση αλλαγών μεγέθους σε πραγματικό χρόνο.

Τι συμβαίνει αν δεν υλοποιηθεί το Screen Continuity;

Κατά το ξεδίπλωμα ή δίπλωμα της συσκευής, το Activity αναδημιουργείται χωρίς αποθήκευση κατάστασης. Ο χρήστης χάνει τα εισαγόμενα δεδομένα, η κύλιση επαναφέρεται, οι ανοιχτοί διάλογοι κλείνουν. Αυτό οδηγεί σε αρνητικές κριτικές και πτώση της βαθμολογίας της εφαρμογής στο Google Play.

Πώς να δοκιμάσω το Screen Continuity χωρίς φυσική συσκευή;

Android Emulator υποστηρίζει προσομοίωση αναδιπλούμενων συσκευών. Δημιουργήστε ένα AVD τύπου Pixel Fold, ανοίξτε τα Extended Controls και επιλέξτε την καρτέλα Folding Postures. Η εναλλαγή στάσεων ενεργοποιεί configuration change, επιτρέποντας τη δοκιμή αποθήκευσης κατάστασης χωρίς φυσική συσκευή.

Σύνοψη

  • Screen Continuity — μηχανισμός Android για τη διατήρηση της κατάστασης Activity κατά την αλλαγή φυσικής διαμόρφωσης αναδιπλούμενης συσκευής.
  • Jetpack WindowManager παρέχει ScreenContinuityController για παρακολούθηση στάσεων HALF_OPENED, FLAT και TABLE_TOP.
  • onRetainNonConfigurationInstance — η κύρια μέθοδος για αποθήκευση δεδομένων πριν από την αναδημιουργία Activity κατά το ξεδίπλωμα.
  • ViewModel και rememberSaveable στο Compose λύνουν το πρόβλημα απώλειας κατάστασης χωρίς χειροκίνητη διαχείριση κύκλου ζωής.
  • Εξομοιωτής Android Studio επιτρέπει τη δοκιμή όλων των στάσεων αναδιπλούμενης συσκευής χωρίς φυσική συσκευή.
  • Αγνόηση του Screen Continuity οδηγεί σε επαναφορά διεπαφής χρήστη και απώλεια εισαγόμενων δεδομένων κατά το δίπλωμα.
  • Συνιστάται η προσθήκη υποστήριξης συνέχειας σε όλες τις εφαρμογές που απευθύνονται σε αναδιπλούμενες συσκευές και tablet.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης