Screen Continuity: mi ez, hajlítási API és a felület adaptálása

Szerző: IT Sectr Megjelenés: 2026-06-09 Olvasási idő: 5 perc

Screen Continuity — az Android mechanizmusa, amely biztosítja az alkalmazás zökkenőmentes átmenetét a hajlítható eszköz összehajtott és kihajtott állapota között. Kihajtáskor a képernyő fizikai méretei megváltoznak, és a rendszer újraindítja az Activity-t új konfigurációkkal. A Google Developer, 2025 szerint a folytonosság helyes kezelése 40%-kal javítja a felhasználói élményt és csökkenti az állapot visszaállításával kapcsolatos panaszok számát. A ScreenContinuity API a Jetpack WindowManager része az 1.1-es verziótól kezdve, és lehetővé teszi a fejlesztő számára az életciklus kezelését az eszköz pózának változásakor.

Főbb pontok

  • Screen Continuity — az Activity állapotának megőrzésére szolgáló technológia a képernyő fizikai konfigurációjának megváltozásakor hajlítható Android-eszközökön.
  • Jetpack WindowManager API-t biztosít az eszköz pózainak követésére: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — a kulcsfontosságú módszer az adatok megőrzésére az Activity újralétrehozásakor összehajtás vagy kihajtás után.
  • Tesztelés a folytonosság a hajlítható eszköz emulátorán keresztül Android Studio segítségével vagy fizikai Galaxy Z Fold eszközökön történik.
  • Figyelmen kívül hagyás a folytonosság a képernyő állapotának elvesztéséhez, az űrlapadatok visszaállításához és a felhasználói élmény romlásához vezet.

Mi az a Screen Continuity?

Screen Continuity egy Android mechanizmus, amely megőrzi az Activity állapotát a képernyő fizikai konfigurációjának megváltozásakor hajlítható eszközökön. Amikor a felhasználó kihajtja vagy összehajtja a telefont, a rendszer újraindíthatja az Activity-t új ablakméretekkel. A folytonosság megakadályozza a bevitt adatok, a görgetési pozíció és az aktuális képernyő elvesztését.

Ellentétben a szokásos képernyőelforgatással, ahol az Android egyszerűen újra létrehozza az Activity-t egy új tájolással, a hajlítható eszközök teljesen új forgatókönyveket vezetnek be. A HALF_OPENED póz lehetővé teszi az alkalmazás számára, hogy fél képernyőn működjön, a FLAT pedig teljesen kihajtott táblagép módban. A Screen Continuity támogatása nélkül minden pózváltás visszaállítja a felületet a kezdeti állapotba.

A Google I/O 2024 szerint a hajlítható eszközök felhasználóinak több mint 62%-a találkozott olyan alkalmazásokkal, amelyek nem megfelelően kezelik az állapotok közötti váltást. A Screen Continuity API szinten oldja meg ezt a problémát, kész eszközöket biztosítva a fejlesztőnek a UI mentéséhez és visszaállításához.

A hajlítható eszközök állapotai: képernyőpózok

Jetpack WindowManager három alapvető pózt határoz meg a hajlítható eszközhöz a FoldingFeature osztályon keresztül. Minden póz megfelel a csuklópánt egy bizonyos fizikai helyzetének, és különleges felületkezelést igényel.

HALF_OPENED — félig nyitott állapot

Az eszköz 30-160 fokos szögben van. A képernyő két logikai területre oszlik. Az alkalmazás megjelenítheti a tartalmat a felső felén és a vezérlőelemeket az alsó felén. Tabletop mód videohívásokhoz és médialejátszókhoz pontosan ezt a pózt használja.

FLAT — teljesen kihajtott állapot

Az eszköz 180 fokban van kinyitva, egyetlen nagy képernyőt alkotva. Az alkalmazás táblagép módba vált megnövelt munkaterülettel. Ebben a pózban ajánlott több paneles elrendezést megjeleníteni navigációs sávval és részletes tartalommal egymás mellett.

TABLE_TOP — laptop póz

Az eszköz egy felületen áll körülbelül 120 fokos szögben. A képernyő alsó fele érintőpanelként vagy billentyűzetként szolgál. Touchpad mód ebben a pózban lehetővé teszi a trackpad emulálását a képernyő alsó részén.

Hogyan működik a képernyő folytonossága Androidban?

Android a hajlítható eszköz konfigurációváltozását a configuration changes mechanizmuson keresztül kezeli. Amikor a felhasználó kihajtja a telefont, a rendszer rögzíti az ablakméret változását és elindítja az Activity újralétrehozásának szokásos ciklusát. A Screen Continuity elfogja ezt a folyamatot és elmenti a kulcsfontosságú adatokat.

Az állapot mentésének fő módszere az onRetainNonConfigurationInstance, amelyet az Activity megsemmisítése előtt hívnak meg. A fejlesztő ebben menti el az adatmodellt, a lista pozícióját és az aktuális navigációs képernyőt. Az újralétrehozás után az Activity ezeket az adatokat a getLastNonConfigurationInstance segítségével kapja meg, és pontosan az összehajtás pillanatáig állítja vissza a UI-t.

A Fragments esetében a mechanizmus a setRetainInstance(true) segítségével van implementálva, amely megakadályozza a fragment megsemmisítését konfigurációváltozáskor. A Jetpack Compose-ban a rememberSaveable-t használják, amely automatikusan elmenti az állapotot a Window Metrics változásakor.

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 }
    }
}

ScreenContinuity API a Jetpack WindowManagerben

Jetpack WindowManager 1.1+ verziója tartalmazza a ScreenContinuityController osztályt, amely kész mechanizmusokat biztosít a képernyő folytonosságának kezelésére. Az API automatikusan kezeli a pózváltást és callback interfészeken keresztül értesíti az alkalmazást.

ScreenContinuityController

A központi osztály, amely regisztrálja a pózváltozás figyelőit. A registerContinuityListener egy callback-et fogad, amely minden egyes átmenetnél aktiválódik a hajlítható eszköz állapotai között. A vezérlő információt is nyújt az aktuális pózról a getCurrentFoldingFeature metóduson keresztül.

FoldingFeatureAdapter

Segédosztály a FoldingFeature adatok alkalmazás számára érthető állapotokká alakításához. A FoldingFeatureAdapter normalizálja a csuklópánt koordinátáit és meghatározza, hogy az aktuális póz HALF_OPENED, FLAT vagy TABLE_TOP. Ez megkíméli a fejlesztőt a szögek és küszöbértékek manuális kiszámításától.

Integráció a Jetpack Compose-zal

A Compose alkalmazások számára a WindowManager WindowSizeClass-t és olyan módosítókat biztosít, amelyek figyelembe veszik a hajlítást. A BoxWithConstraints komponens valós időben alkalmazkodik a képernyő méretének változásaihoz anélkül, hogy újra létrehozná az Activity-t. A Compose automatikusan recompozíciót vált ki a WindowMetrics változásakor.

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()
    }
}

Példa implementáció Kotlinban

Tekintsünk át egy teljes példát Activity-re Screen Continuity támogatással. A MainActivity három forgatókönyvet kezel: összehajtás, kihajtás és félig nyitott állapot. Az adatok az onRetainNonConfigurationInstance segítségével kerülnek mentésre és az újralétrehozáskor visszaállításra.

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
)

A kulcselem a ContinuityState osztály, amely az elemek listáját és a görgetési pozíciót tárolja. Az Activity ezt az újralétrehozás előtt elmenti és közvetlenül az onCreate meghívása után visszaállítja. A WindowManager vezérlő feliratkozik a pózváltozásokra és átkapcsolja az elrendezést a módok között.

A folytonosság tesztelése emulátoron és eszközön

Android Studio hajlítható eszköz emulátort biztosít mindhárom póz támogatásával. A Screen Continuity teszteléséhez elegendő egy Pixel Fold vagy Samsung Galaxy Z Fold típusú virtuális eszközt létrehozni és a pózt az emulátor vezérlőpultján keresztül váltani.

Emulátor beállítása

Hozzon létre egy AVD-t Foldable kategóriával és válasszon 7,6 hüvelykes képernyőfelbontást. Az emulátor kibővített vezérlőiben nyissa meg a Folding Postures fület és váltson a pózok között. Minden váltás egy configuration change-t vált ki, amelyet az alkalmazásnak helyesen kell kezelnie.

Fizikai eszköz

Valódi eszközön (Galaxy Z Fold 5, Pixel Fold) a tesztelés fizikai kihajtással történik. A Samsung DeX és Multi-Window módok szintén aktiválják a folytonosságot. Hibakereséshez használja az adb shell dumpsys window policy ADB parancsot, amely megjeleníti a hajtás aktuális állapotát.

Tipikus problémák

A fő hibák — a RecyclerView állapotának elvesztése, a szöveg visszaállítása szövegmezőkben és a párbeszédablakok bezáródása. A ViewModel ezeket a problémákat úgy oldja meg, hogy az adatokat a memóriában tárolja függetlenül az Activity életciklusától. Szintén fontos az Activity megjelölése a manifestben az android:configChanges paraméterrel, ha az alkalmazás manuálisan kezeli a változásokat.

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

Gyakran Ismételt Kérdések

Miben különbözik a Screen Continuity a szokásos állapotmentéstől?

Screen Continuity a képernyő fizikai méretének változásakor menti az állapotot, nem csak elforgatáskor. A szokásos onSaveInstanceState nem garantálja a megőrzést a hajlítható eszköz pózainak váltásakor, míg a ScreenContinuityController pontosan ezt a forgatókönyvet kezeli.

Mely Android-eszközök támogatják a Screen Continuity-t?

Minden hajlítható eszköz Android 10+ és Google Play szolgáltatásokkal. A támogatás megtalálható a Pixel Fold-ban, a Galaxy Z Fold sorozatban, a Huawei Mate X-ben, az Oppo Find N-ben és a OnePlus Open-ben. A működéshez Jetpack WindowManager 1.1-es vagy újabb verzió szükséges.

Hogyan működik a Screen Continuity a Jetpack Compose-zal?

Jetpack Compose a Screen Continuity-t a rememberSaveable és WindowSizeClass segítségével támogatja. A kompozíció automatikusan reagál a WindowMetrics változására, a rememberSaveable pedig elmenti az állapotot a recompozíciók között. Az onSizeChanged módosító lehetővé teszi a méretváltozások valós idejű követését.

Mi történik, ha nem implementáljuk a Screen Continuity-t?

Az eszköz kihajtásakor vagy összehajtásakor az Activity újra létrejön az állapot megőrzése nélkül. A felhasználó elveszíti a bevitt adatokat, a görgetés visszaáll, a nyitott párbeszédablakok bezáródnak. Ez negatív értékelésekhez és az alkalmazás Google Play-beli értékelésének csökkenéséhez vezet.

Hogyan tesztelhető a Screen Continuity fizikai eszköz nélkül?

Android Emulator támogatja a hajlítható eszközök szimulációját. Hozzon létre egy Pixel Fold típusú AVD-t, nyissa meg az Extended Controls-t és válassza a Folding Postures fület. A pózok váltása configuration change-t vált ki, lehetővé téve az állapotmentés tesztelését fizikai eszköz nélkül.

Összefoglalás

  • Screen Continuity — Android mechanizmus az Activity állapotának megőrzésére a hajlítható eszköz fizikai konfigurációjának változásakor.
  • Jetpack WindowManager ScreenContinuityController-t biztosít a HALF_OPENED, FLAT és TABLE_TOP pózok követésére.
  • onRetainNonConfigurationInstance — a fő módszer az adatok mentésére az Activity újralétrehozása előtt kihajtáskor.
  • ViewModel és a rememberSaveable Compose-ban megoldja az állapotvesztés problémáját manuális életciklus-kezelés nélkül.
  • Android Studio emulátor lehetővé teszi a hajlítható eszköz összes pózának tesztelését fizikai eszköz nélkül.
  • Screen Continuity figyelmen kívül hagyása a felhasználói felület visszaállításához és a bevitt adatok elvesztéséhez vezet összehajtáskor.
  • Ajánlott a folytonosság támogatásának hozzáadása minden hajlítható eszközökre és táblagépekre célzó alkalmazáshoz.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is