Screen Continuity: bu nima, buklama API va interfeysni moslashtirish

Muallif: IT Sectr Nashr etilgan: 2026-06-09 O'qish vaqti: 5 daq

Screen Continuity — buklangan va ochilgan holat o'rtasida dasturning uzluksiz o'tishini ta'minlaydigan Android mexanizmi. Ochishda ekran jismoniy o'lchamlarini o'zgartiradi va tizim Activity-ni yangi konfiguratsiyalar bilan qayta ishga tushiradi. Google Developer, 2025 ma'lumotlariga ko'ra, continuity-ni to'g'ri qayta ishlash foydalanuvchi tajribasini 40% ga yaxshilaydi va holatni tiklash haqidagi shikoyatlar sonini kamaytiradi. ScreenContinuity API Jetpack WindowManager tarkibiga 1.1 versiyasidan boshlab kiritilgan va dasturchiga qurilma pozasini o'zgartirishda hayotiy tsiklni boshqarish imkonini beradi.

Asosiy

  • Screen Continuity — buklanadigan Android qurilmalarida ekranning jismoniy konfiguratsiyasi o'zgarganda Activity holatini saqlash texnologiyasi.
  • Jetpack WindowManager qurilma pozalarini kuzatish uchun API taqdim etadi: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — buklash yoki ochishdan keyin Activity qayta yaratilganda ma'lumotlarni saqlash uchun asosiy metod.
  • Sinov continuity Android Studio orqali buklanadigan qurilma emulyatorida yoki Galaxy Z Fold fizik qurilmalarida amalga oshiriladi.
  • E'tiborsizlik continuity ekran holatini yo'qotishga, forma ma'lumotlarini tiklashga va foydalanuvchi tajribasining yomonlashishiga olib keladi.

Screen Continuity nima?

Screen Continuity buklanadigan qurilmalarda ekranning jismoniy konfiguratsiyasi o'zgarganda Activity holatini saqlaydigan Android mexanizmidir. Foydalanuvchi telefonni ochgan yoki buklaganda tizim Activity-ni yangi oyna o'lchamlari bilan qayta ishga tushirishi mumkin. Uzluksizlik kiritilgan ma'lumotlarning, aylantirish holatining va joriy ekranning yo'qolishining oldini oladi.

Oddiy ekran aylantirishdan farqli o'laroq, Android shunchaki Activity-ni yangi yo'nalish bilan qayta yaratadi, buklanadigan qurilmalar butunlay yangi stsenariylarni joriy etadi. HALF_OPENED pozasi dasturning yarim ekranda ishlashiga imkon beradi, FLAT esa to'liq ochilgan planshet rejimida. Screen Continuity qo'llab-quvvatlamasdan, har bir poza o'zgarishi interfeysni boshlang'ich holatga qaytaradi.

Google I/O 2024 ma'lumotlariga ko'ra, buklanadigan qurilma foydalanuvchilarining 62% dan ortig'i holatlar o'rtasida o'tishni noto'g'ri boshqaradigan dasturlarga duch kelgan. Screen Continuity bu muammoni API darajasida hal qiladi va dasturchiga UI ni saqlash va tiklash uchun tayyor vositalarni taqdim etadi.

Buklanadigan qurilmalar holatlari: ekran pozalari

Jetpack WindowManager FoldingFeature sinfi orqali buklanadigan qurilmaning uchta asosiy pozasini belgilaydi. Har bir poza ilgakning ma'lum bir jismoniy holatiga mos keladi va maxsus interfeysni qayta ishlashni talab qiladi.

HALF_OPENED — yarim ochiq holat

Qurilma 30 dan 160 darajagacha burchak ostida. Ekran ikkita mantiqiy hududga bo'lingan. Dastur tarkibni yuqori yarmida va boshqaruv elementlarini pastki yarmida ko'rsatishi mumkin. Tabletop rejimi video qo'ng'iroqlar va media pleerlar uchun aynan shu pozadan foydalanadi.

FLAT — to'liq ochilgan holat

Qurilma 180 darajaga ochilib, bitta katta ekranni hosil qiladi. Dastur kengaytirilgan ish maydoni bilan planshet rejimiga o'tadi. Bu pozada navigatsiya paneli va batafsil tarkibni yonma-yon ko'rsatadigan ko'p panelli layout tavsiya etiladi.

TABLE_TOP — noutbuk pozasi

Qurilma sirt ustida taxminan 120 daraja burchak ostida turadi. Ekranning pastki yarmi sensorli panel yoki klaviatura sifatida xizmat qiladi. Touchpad rejimi bu pozada ekranning pastki qismida trekpaddi emulyatsiya qilish imkonini beradi.

Androidda ekran uzluksizligi qanday ishlaydi?

Android buklanadigan qurilma konfiguratsiyasining o'zgarishini configuration changes mexanizmi orqali qayta ishlaydi. Foydalanuvchi telefonni ochganda tizim oyna o'lchamining o'zgarishini qayd etadi va Activity-ni qayta yaratishning standart tsiklini boshlaydi. Screen Continuity bu jarayonni tutib oladi va asosiy ma'lumotlarni saqlaydi.

Holatni saqlashning asosiy metodi onRetainNonConfigurationInstance bo'lib, Activity yo'q qilinishidan oldin chaqiriladi. Dasturchi unda ma'lumot modelini, ro'yxat o'rnini va joriy navigatsiya ekranini saqlaydi. Qayta yaratilgandan so'ng, Activity bu ma'lumotlarni getLastNonConfigurationInstance orqali oladi va UI ni buklash vaqtigacha tiklaydi.

Fragments uchun mexanizm setRetainInstance(true) orqali amalga oshiriladi, bu konfiguratsiya o'zgarishida fragmentning yo'q qilinishini oldini oladi. Jetpack Compose-da Window Metrics o'zgarganda holatni avtomatik saqlaydigan rememberSaveable ishlatiladi.

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

Jetpack WindowManager 1.1+ versiyasi ScreenContinuityController sinfini o'z ichiga oladi, u ekran uzluksizligini boshqarish uchun tayyor mexanizmlarni taqdim etadi. API avtomatik ravishda poza o'zgarishini qayta ishlaydi va callback interfeyslari orqali dasturga xabar beradi.

ScreenContinuityController

Poza o'zgarishi tinglovchilarini ro'yxatdan o'tkazadigan markaziy sinf. registerContinuityListener buklanadigan qurilma holatlari o'rtasidagi har bir o'tishda ishga tushadigan callbackni qabul qiladi. Kontroller shuningdek getCurrentFoldingFeature metodi orqali joriy poza haqida ma'lumot beradi.

FoldingFeatureAdapter

FoldingFeature ma'lumotlarini dastur uchun tushunarli holatlarga aylantirish uchun yordamchi sinf. FoldingFeatureAdapter ilgak koordinatalarini normallashtiradi va joriy poza HALF_OPENED, FLAT yoki TABLE_TOP ekanligini aniqlaydi. Bu dasturchini burchaklar va chegara qiymatlarini qo'lda hisoblashdan ozod qiladi.

Jetpack Compose bilan integratsiya

Compose dasturlari uchun WindowManager WindowSizeClass va buklanishni hisobga oladigan modifikatorlarni taqdim etadi. BoxWithConstraints komponenti Activity-ni qayta yaratmasdan ekran o'lchamlarining o'zgarishiga real vaqtda moslashadi. Compose WindowMetrics o'zgarganda avtomatik ravishda rekompozitsiyani ishga tushiradi.

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-da amalga oshirish namunasi

Screen Continuity qo'llab-quvvatlaydigan Activity ning to'liq misolini ko'rib chiqaylik. MainActivity uchta stsenariyni qayta ishlaydi: buklash, ochish va yarim ochiq holat. Ma'lumotlar onRetainNonConfigurationInstance orqali saqlanadi va qayta yaratishda tiklanadi.

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
)

Asosiy element ContinuityState sinfidir, u elementlar ro'yxati va aylantirish o'rnini saqlaydi. Activity uni qayta yaratishdan oldin saqlaydi va onCreate chaqirilgandan so'ng darhol tiklaydi. WindowManager kontrolleri poza o'zgarishlariga obuna bo'ladi va layoutni rejimlar o'rtasida almashtiradi.

Emulyator va qurilmada uzluksizlikni sinash

Android Studio uchala pozani qo'llab-quvvatlaydigan buklanadigan qurilma emulyatorini taqdim etadi. Screen Continuity ni sinash uchun Pixel Fold yoki Samsung Galaxy Z Fold tipidagi virtual qurilma yaratish va emulyator boshqaruv paneli orqali pozani o'zgartirish kifoya.

Emulyatorni sozlash

Foldable toifasi bilan AVD yarating va 7,6 dyuymli ekran o'lchamini tanlang. Emulyatorning kengaytirilgan boshqaruvida Folding Postures yorlig'ini oching va pozalar o'rtasida o'ting. Har bir o'tish dastur tomonidan to'g'ri qayta ishlanishi kerak bo'lgan configuration change ni ishga tushiradi.

Jismoniy qurilma

Haqiqiy qurilmada (Galaxy Z Fold 5, Pixel Fold) sinov jismoniy ochish orqali amalga oshiriladi. Samsung DeX va Multi-Window rejimlari ham uzluksizlikni faollashtiradi. Disk raskadrovka uchun joriy buklanish holatini ko'rsatadigan adb shell dumpsys window policy ADB buyrug'idan foydalaning.

Oddiy muammolar

Asosiy xatolar — RecyclerView holatini yo'qotish, matn maydonlarida matnni tiklash va dialog oynalarini yopish. ViewModel bu muammolarni Activity hayotiy tsiklidan mustaqil ravishda ma'lumotlarni xotirada saqlash orqali hal qiladi. Shuningdek, agar dastur o'zgarishlarni qo'lda qayta ishlasa, Activity ni manifestda android:configChanges parametri bilan belgilash muhimdir.

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

Tez-tez beriladigan savollar

Screen Continuity oddiy holatni saqlashdan nima bilan farq qiladi?

Screen Continuity ekranning jismoniy o'lchami o'zgarganda holatni saqlaydi, faqat aylantirishda emas. Oddiy onSaveInstanceState buklanadigan qurilma pozalari o'rtasida o'tishda saqlanishni kafolatlamaydi, ScreenContinuityController esa aynan shu stsenariyni qayta ishlaydi.

Qaysi Android qurilmalari Screen Continuity ni qo'llab-quvvatlaydi?

Android 10+ va Google Play xizmatlari bo'lgan barcha buklanadigan qurilmalar. Qo'llab-quvvatlash Pixel Fold, Galaxy Z Fold seriyasi, Huawei Mate X, Oppo Find N va OnePlus Open-ga kiritilgan. Ishlash uchun Jetpack WindowManager 1.1 versiyasi va undan yuqorisi talab qilinadi.

Screen Continuity Jetpack Compose bilan qanday ishlaydi?

Jetpack Compose Screen Continuity-ni rememberSaveable va WindowSizeClass orqali qo'llab-quvvatlaydi. Kompozitsiya WindowMetrics o'zgarishiga avtomatik reaksiya beradi va rememberSaveable rekompozitsiyalar o'rtasida holatni saqlaydi. onSizeChanged modifikatori o'lcham o'zgarishlarini real vaqtda kuzatish imkonini beradi.

Screen Continuity amalga oshirilmasa nima bo'ladi?

Qurilma ochilganda yoki buklanganda Activity holatni saqlamasdan qayta yaratiladi. Foydalanuvchi kiritilgan ma'lumotlarni yo'qotadi, aylantirish tiklanadi, ochiq dialoglar yopiladi. Bu salbiy sharhlarga va Google Play-da dastur reytingining pasayishiga olib keladi.

Jismoniy qurilmasiz Screen Continuity ni qanday sinash mumkin?

Android Emulator buklanadigan qurilmalarni simulyatsiya qilishni qo'llab-quvvatlaydi. Pixel Fold tipida AVD yarating, Extended Controls-ni oching va Folding Postures yorlig'ini tanlang. Pozalar o'rtasida o'tish jismoniy qurilmasiz holatni saqlashni sinash imkonini beradigan configuration change ni ishga tushiradi.

Xulosa

  • Screen Continuity — buklanadigan qurilmaning jismoniy konfiguratsiyasi o'zgarganda Activity holatini saqlash uchun Android mexanizmi.
  • Jetpack WindowManager HALF_OPENED, FLAT va TABLE_TOP pozalarini kuzatish uchun ScreenContinuityController ni taqdim etadi.
  • onRetainNonConfigurationInstance — ochishda Activity ni qayta yaratishdan oldin ma'lumotlarni saqlashning asosiy metodi.
  • ViewModel va Compose-dagi rememberSaveable hayotiy tsiklni qo'lda boshqarmasdan holatni yo'qotish muammosini hal qiladi.
  • Android Studio emulyatori jismoniy qurilmasiz buklanadigan qurilmaning barcha pozalarini sinash imkonini beradi.
  • Screen Continuity ni e'tiborsiz qoldirish foydalanuvchi interfeysining tiklanishinga va buklashda kiritilgan ma'lumotlarning yo'qolishiga olib keladi.
  • Tavsiya etiladi buklanadigan qurilmalar va planshetlar uchun mo'ljallangan barcha dasturlarga uzluksizlik qo'llab-quvvatlashini qo'shish.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing