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 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.
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.
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.
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.
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 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.
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 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.
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.
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.
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.
val windowManager = WindowManager(context)
val controller = windowManager.screenContinuityController
controller.registerContinuityListener { feature: FoldingFeature ->
when (feature.state) {
FoldingFeature.State.HALF_OPENED -> enterTabletopMode()
FoldingFeature.State.FLAT -> expandToTablet()
}
}
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.
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.
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.
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.
Həqiqi cihazda (Galaxy Z Fold 5, Pixel Fold) test fiziki olaraq açma ilə aparılır. Samsung DeX və Multi-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.
Ə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.
<!-- AndroidManifest.xml -->
@android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
Tez-tez verilən suallar
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.
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.
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.
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.
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ə
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.
Həm də oxuyun