Screen Continuity: bu nədir, qatlama API-i və interfeysin adaptasiyası

Müəllif: IT Sectr Dərc olunub: 2026-06-09 Oxuma vaxtı: 5 dəq

Screen Continuity — tətbiqin qatlanmış və açılmış vəziyyəti arasında problemsiz keçidini təmin edən Android mexanizmi. Açılma zamanı ekran fiziki ölçülərini dəyişir və sistem Activity-ni yeni konfiqurasiyalarla yenidən başladır. Google Developer, 2025-ə görə, continuity-nin düzgün işlənməsi istifadəçi təcrübəsini 40% artırır və vəziyyətin sıfırlanması ilə bağlı şikayətlərin sayını azaldır. ScreenContinuity API-i Jetpack WindowManager-in 1.1 versiyasından başlayaraq daxildir və tərtibaçıya cihazın pozasını dəyişdirərkən həyat dövrünü idarə etməyə imkan verir.

Başlıca

  • Screen Continuity — qatlanan Android cihazlarında ekranın fiziki konfiqurasiyası dəyişərkən Activity vəziyyətini qoruma texnologiyası.
  • Jetpack WindowManager cihaz pozalarını izləmək üçün API təqdim edir: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — qatlama və ya açma sonrası Activity yenidən yaradıldıqda məlumatları qorumaq üçün açar metod.
  • Test etmə continuity Android Studio vasitəsilə qatlanan cihaz emulatorunda və ya Galaxy Z Fold fiziki cihazlarında aparılır.
  • Ignor etmə continuity ekran vəziyyətinin itirilməsinə, forma məlumatlarının sıfırlanmasına və istifadəçi təcrubəsinin pisləşməsinə götərir.

Screen Continuity nədir?

Screen Continuity — qatlanan cihazlarda ekranın fiziki konfiqurasiyası dəyişərkən Activity vəziyyətini qoruyan Android mexanizmidir. Istifadəçi telefonu açdıqda və ya qatladıqda sistem Activity-ni yeni pəncərə ölçüləri ilə yenidən başlada bilər. Davamlılıq daxil edilmiş məlumatların, səhifənin şaquli sürüşdürülməsinin və cari ekranın itirilməsinin qarşısını alır.

Adi ekran döndərməsindən fərqli olaraq, Android sadəcə Activity-ni yeni istiqamətlə yenidən yaratdıqda, qatlanan cihazlar tamamilə yeni ssenarilər təqdim edir. HALF_OPENED pozası tətbiqin yarı ekranda işləməsinə imkan verir, FLAT isə tam açılmış planşet rejimindədir. Screen Continuity dəstəyi olmadan hər poz dəyişikliyi interfeysi başlanğıc vəziyyətinə sıfırlayır.

Google I/O 2024 məlumatlarına görə, qatlanan cihaz istifadəçilərinin 62%-dən çoxu vəziyyətlər arasında keçidi düzgün işləməyən tətbiqlərlə qarşılaşıb. Screen Continuity bu problemi API səviyyəsində həll edir, tərtibaçıya UI-ni qorumaq və bərpa etmək üçün hazır alətlər təqdim edir.

Qatlanan cihazların vəziyyətləri: ekran pozaları

Jetpack WindowManager FoldingFeature sinfi vasitəsilə qatlanan cihazın üç əsas pozasını təyin edir. Hər poza müəyyən fiziki məntəqə vəziyyətinə uyğundur və xüsusi interfeys işlənməsi tələb edir.

HALF_OPENED — yarı açıq vəziyyət

Cihaz 30-160 dərəcə bucaq altındadır. Ekran iki məntiqi sahəyə bölünür. Tətbiq məzmunu yuxarı yarıda, idarəetmə elementlərini işə aşağı yarıda göstərə bilər. Tabletop rejimi video zənglər və media pleyerlər üçün məhz bu pozadan istifadə edir.

FLAT — tam açılmış vəziyyət

Cihaz 180 dərəcə açılaraq vahid böyük ekran yaradır. Tətbiq böyüdülmüş iş sahəsi ilə planşet rejiminə keçir. Bu pozada naviqasiya paneli və ətraflı məzmunu yan-yana göstərən çoxpanelli layout təvsiyə olunur.

TABLE_TOP — noutbuk pozası

Cihaz səth üzərində təxminən 120 dərəcə bucaq altında dayanır. Ekranın aşağı yarısı toxunma paneli və ya klaviatura kimi xidmət edir. Touchpad rejimi bu pozada ekranın aşağı hissəsində trekpaddı emulyasiya etməyə imkan verir.

Android-da ekran davamlılığı necə işləyir?

Android qatlanan cihazın konfiqurasiya dəyişikliyini configuration changes mexanizmi vasitəsilə işləyir. Istifadəçi telefonu açdıqda sistem pəncərə ölçüsündə dəyişikliyi qeyd edir və Activity-nin yenidən yaradılmasının standart dövrünü başladır. Screen Continuity bu prosesi tutur və açar məlumatları qoruyur.

Vəziyyəti qorumaq üçün əsas metod onRetainNonConfigurationInstance-dir, Activity məhv edilməzdən əvvəl çağırılır. Tərtibaçı burada məlumat modelini, siyahı mövqeyini və cari naviqasiya ekranını qoruyur. Activity yenidən yaradıldıqdan sonra bu məlumatları getLastNonConfigurationInstance vasitəsilə alır və UI-ni qatlama anındakı vəziyyətə qədər bərpa edir.

Fragments üçün mexanizm setRetainInstance(true) vasitəsilə həyata keçirilir, bu da konfiqurasiya dəyişikliyi zamanı fraqmentin məhv edilməsinin qarşısını alır. Jetpack Compose-da Window Metrics dəyişərkən vəziyyəti avtomatik qoruyan rememberSaveable istifadə olunur.

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

Jetpack WindowManager-da ScreenContinuity API-i

Jetpack WindowManager 1.1+ versiyası ScreenContinuityController sinfini ehtiva edir, ekran davamlılığını idarə etmək üçün hazır mexanizmlər təqdim edir. API avtomatik olaraq poza dəyişikliyini işləyir və tətbiqə callback interfeysləri vasitəsilə məlumat verir.

ScreenContinuityController

Poza dəyişikliklərinin dinləyicilərini qeydiyyatdan keçirən mərkəzi sinif. registerContinuityListener qatlanan cihazın vəziyyətləri arasında hər keçiddə işə düşən callback qəbul edir. Kontroller həmçinin getCurrentFoldingFeature metodu vasitəsilə cari poza haqqında məlumat verir.

FoldingFeatureAdapter

FoldingFeature məlumatlarını tətbiq üçün başa düşülən vəziyyətlərə çevirmək üçün yardımçı sinif. FoldingFeatureAdapter məntəqə koordinatlarını normallaşdırır və cari pozanın HALF_OPENED, FLAT və ya TABLE_TOP olduğunu müəyyən edir. Bu, tərtibaçını bucaqların və hədd dəyərlərinin əl ilə hesablanmasından azad edir.

Jetpack Compose ilə inteqrasiya

Compose tətbiqləri üçün WindowManager WindowSizeClass və qatlamanı nəzərə alan modifikatorlar təqdim edir. BoxWithConstraints komponenti Activity-ni yenidən yaratmadan ekran ölçülərinin dəyişməsinə real vaxt rejimində uyğunlaşır. Compose WindowMetrics dəyişdikdə avtomatik olaraq rekompozisiyaya səbəb olur.

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-də tətbiq nümunəsi

Screen Continuity dəstəyi olan Activity-nin tam nümunəsini nəzərdən keçirək. MainActivity üç ssenarini işləyir: qatlama, açma və yarı açıq vəziyyət. Məlumatlar onRetainNonConfigurationInstance vasitəsilə qorunur və yenidən yaratma zamanı bərpa olunur.

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çar element ContinuityState sinfidir, elementlər siyahısını və sürüşdürmə mövqeyini saxlayır. Activity onu yenidən yaratmadan əvvəl qoruyur və onCreate çağırıldıqdan sonra bərpa edir. WindowManager kontrolleri poza dəyişikliklərinə abunə olur və layout rejimlər arasında keçirir.

Emulator və cihazda davamlılığın test edilməsi

Android Studio hər üç pozanı dəstəkləyən qatlanan cihaz emulatoru təqdim edir. Screen Continuity-u test etmək üçün Pixel Fold və ya Samsung Galaxy Z Fold tipində virtual cihaz yaratmaq və emulatorun idarəetmə paneli vasitəsilə pozanı dəyişmək kifayətdir.

Emulatorun qurulması

Foldable kateqoriyası ilə AVD yaradın və 7.6 düym ekran təsvir ölçüsü seçin. Emulatorun genişlətmiş idarəetmə panelində Folding Postures sekmesini açın və pozalar arasında keçid edin. Hər keçid tətbiq tərəfindən düzgün işlənməli olan configuration change-i tetikləyir.

Fiziki cihaz

Həqiqi cihazda (Galaxy Z Fold 5, Pixel Fold) test fiziki olaraq açma ilə aparılır. Samsung DeXMulti-Window rejimləri də davamlılığı aktivləşdirir. Debug üçün cari qatlama vəziyyətini göstərən adb shell dumpsys window policy ADB əmrindən istifadə edin.

Tipik problemlər

Əsas səhvlər — RecyclerView vəziyyətinin itirilməsi, mətn sahələrində mətnin sıfırlanması və dialoq pəncərələrinin bağlanması. ViewModel bu problemləri həll edir, məlumatları Activity-nin həyat dövründən asılı olmayaraq yaddaşda saxlayır. Həmçinin, tətbiq dəyişiklikləri əl ilə işləyirsə, Activity-ni manifestdə android:configChanges parametri ilə qeyd etmək vacibdir.

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

Tez-tez verilən suallar

Screen Continuity adi vəziyyət qorunmasından nə ilə fərqlənir?

Screen Continuity ekranın fiziki ölçüsü dəyişərkən vəziyyəti qoruyur, təkcə döndərmə zamanı deyil. Adi onSaveInstanceState qatlanan cihazın pozaları arasında keçid zamanı qorunmaya zəmanət vermir, halbuki ScreenContinuityController məhz bu ssenarini işləyir.

Hansı Android cihazları Screen Continuity-ni dəstəkləyir?

Android 10+ və Google Play xidmətləri olan bütün qatlanan cihazlar. Dəstək Pixel Fold, Galaxy Z Fold seriyası, Huawei Mate X, Oppo Find N və OnePlus Open-da daxildir. Işləmə üçün Jetpack WindowManager versiyası 1.1 və daha yüksək tələb olunur.

Screen Continuity Jetpack Compose ilə necə işləyir?

Jetpack Compose Screen Continuity-ni rememberSaveable və WindowSizeClass vasitəsilə dəstəkləyir. Kompozisiya WindowMetrics dəyişməsinə avtomatik reaksiya verir, rememberSaveable isə rekompozisiyalar arasında vəziyyəti qoruyur. onSizeChanged modifikatoru ölçülərin real vaxt rejimində izlənməsinə imkan verir.

Screen Continuity tətbiq edilməsə nə baş verər?

Cihaz açıldıqda və ya qatlandıqda Activity vəziyyəti qorunmadan yenidən yaradılır. Istifadəçi daxil etdiyi məlumatları itirir, səhifənin sürüşdürülməsi sıfırlanır, açıq dialoqlar bağlanır. Bu, mənfi rəylərə və Google Play-də tətbiq reytinqinin düşməsinə səbəb olur.

Fiziki cihaz olmadan Screen Continuity-ni necə test etmək olar?

Android Emulator qatlanan cihazların simulyasiyasını dəstəkləyir. Pixel Fold tipində AVD yaradın, Extended Controls-u açın və Folding Postures sekmesini seçin. Pozalar arasında keçid fiziki cihaz olmadan vəziyyətin qorunmasını test etməyə imkan verən configuration change-i tetikləyir.

Nəticə

  • Screen Continuity — qatlanan cihazın fiziki konfiqurasiyası dəyişərkən Activity vəziyyətini qorumaq üçün Android mexanizmi.
  • Jetpack WindowManager HALF_OPENED, FLAT və TABLE_TOP pozalarını izləmək üçün ScreenContinuityController təqdim edir.
  • onRetainNonConfigurationInstance — açılma zamanı Activity-nin yenidən yaradılmasından əvvəl məlumatları qorumaq üçün əsas metod.
  • ViewModel və Compose-da rememberSaveable həyat dövrünü əl ilə idarə etmədən vəziyyət itkisi problemini həll edir.
  • Android Studio emulatoru fiziki cihaz olmadan qatlanan cihazın bütün pozalarını test etməyə imkan verir.
  • Screen Continuity-ni ignora etmək istifadəçi interfeysinin sıfırlanmasına və qatlama zamanı daxil edilmiş məlumatların itirilməsinə götərir.
  • Tövsiyə olunur qatlanan cihazlar və planşetlər üçün nəzərdə tutulmuş bütün tətbiqlərə davamlılıq dəstəyi əlavə etmək.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun