Screen Continuity: nedir, katlama API'si ve arayüz uyarlaması

Yazar: IT Sectr Yayınlanma: 2026-06-09 Okuma süresi: 5 dk

Screen Continuity, katlanabilir bir cihazın katlanmış ve açılmış durumları arasında uygulamanın kesintisiz geçişini sağlayan bir Android mekanizmasıdır. Açarken ekran fiziksel boyutlarını değiştirir ve sistem Activity'yi yeni yapılandırmalarla yeniden başlatır. Google Developer, 2025'e göre, sürekliliğin doğru işlenmesi kullanıcı deneyimini %40 iyileştirir ve durum kaybı şikayetlerini azaltır. ScreenContinuity API, Jetpack WindowManager'ın 1.1 sürümünden itibaren parçasıdır ve geliştiricinin cihaz duruşu değiştiğinde yaşam döngüsünü yönetmesine olanak tanır.

Önemli Noktalar

  • Screen Continuity — Android katlanabilir cihazlarda ekranın fiziksel yapılandırması değiştiğinde Activity durumunu koruyan teknoloji.
  • Jetpack WindowManager, cihaz duruşlarını izlemek için API sağlar: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — katlama veya açma sonrası Activity yeniden oluşturulduğunda verileri korumak için ana yöntem.
  • Test süreklilik testi, Android Studio üzerinden katlanabilir cihaz emülatöründe veya Galaxy Z Fold gibi fiziksel cihazlarda yapılır.
  • Görmezden gelme sürekliliği göz ardı etmek, ekran durumu kaybına, form verilerinin sıfırlanmasına ve kullanıcı deneyiminin bozulmasına yol açar.

Screen Continuity Nedir?

Screen Continuity, katlanabilir cihazlarda ekranın fiziksel yapılandırması değiştiğinde Activity durumunu koruyan bir Android mekanizmasıdır. Kullanıcı telefonu açtığında veya katladığında, sistem Activity'yi yeni pencere boyutlarıyla yeniden başlatabilir. Süreklilik, girilen verilerin, kaydırma konumunun ve mevcut ekranın kaybını önler.

Android'in yalnızca yeni bir yönlendirmeyle Activity'yi yeniden oluşturduğu basit bir ekran döndürmeden farklı olarak, katlanabilir cihazlar temelde yeni senaryolar sunar. HALF_OPENED duruşu, uygulamanın yarım ekranda çalışmasına izin verirken, FLAT tamamen açılmış tablet modunda çalışır. Screen Continuity desteği olmadan, her duruş değişikliği arayüzü başlangıç durumuna sıfırlar.

Google I/O 2024'e göre, katlanabilir cihaz kullanıcılarının %62'sinden fazlası durum geçişini yanlış işleyen uygulamalarla karşılaşmıştır. Screen Continuity bu sorunu API düzeyinde çözerek geliştiriciye kullanıcı arayüzünü kaydetmek ve geri yüklemek için hazır araçlar sağlar.

Katlanabilir Cihaz Durumları: Ekran Duruşları

Jetpack WindowManager, FoldingFeature sınıfı aracılığıyla katlanabilir cihazlar için üç temel duruş tanımlar. Her duruş, belirli bir fiziksel menteşe konumuna karşılık gelir ve özel arayüz işlemesi gerektirir.

HALF_OPENED — Yarı Katlanmış Durum

Cihaz 30 ila 160 derece arasında bir açıdadır. Ekran iki mantıksal alana ayrılır. Uygulama, üst yarıda içerik ve alt yarıda kontroller görüntüleyebilir. Video görüşmeleri ve medya oynatıcılar için tabletop modu bu duruşu kullanır.

FLAT — Tamamen Açılmış Durum

Cihaz 180 derece açıktır ve tek bir büyük ekran oluşturur. Uygulama, genişletilmiş bir çalışma alanıyla tablet moduna geçer. Bu duruşta, gezinme paneli ve ayrıntılı içerikle yan yana çok bölmeli bir düzen gösterilmesi önerilir.

TABLE_TOP — Dizüstü Bilgisayar Duruşu

Cihaz yaklaşık 120 derecelik bir açıyla bir yüzeyde durur. Ekranın alt yarısı dokunmatik panel veya klavye görevi görür. Bu duruştaki touchpad modu, ekranın alt kısmında bir izleme dörtgeni öykünmesine olanak tanır.

Android'de Ekran Sürekliliği Nasıl Çalışır?

Android, katlanabilir cihaz yapılandırma değişikliklerini configuration changes mekanizması aracılığıyla işler. Kullanıcı telefonu açtığında, sistem pencere boyutu değişikliğini algılar ve standart Activity yeniden oluşturma döngüsünü başlatır. Screen Continuity bu süreci durdurur ve anahtar verileri kaydeder.

Durumu kaydetmenin ana yöntemi, Activity yok edilmeden önce çağrılan onRetainNonConfigurationInstance'dır. Geliştirici, veri modelini, liste konumunu ve mevcut gezinme ekranını burada kaydeder. Yeniden oluşturulduktan sonra Activity, bu verileri getLastNonConfigurationInstance aracılığıyla alır ve UI'yi katlamadan önceki haline tam olarak geri yükler.

Fragment'ler için mekanizma, yapılandırma değişikliklerinde fragment'ın yok edilmesini önleyen setRetainInstance(true) aracılığıyla uygulanır. Jetpack Compose'ta, Window Metrics değiştiğinde durumu otomatik olarak kaydeden rememberSaveable kullanılır.

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 sürüm 1.1+, ekran sürekliliğini yönetmek için hazır mekanizmalar sağlayan ScreenContinuityController sınıfını içerir. API, duruş değişikliklerini otomatik olarak işler ve geri arama arayüzleri aracılığıyla uygulamayı bildirir.

ScreenContinuityController

Duruş değişikliği dinleyicilerini kaydeden merkezi sınıf. registerContinuityListener, katlanabilir cihaz durumları arasındaki her geçişte tetiklenen bir geri çağrıyı kabul eder. Denetleyici ayrıca getCurrentFoldingFeature yöntemi aracılığıyla mevcut duruş hakkında bilgi sağlar.

FoldingFeatureAdapter

FoldingFeature verilerini uygulama tarafından okunabilir durumlara dönüştürmek için bir yardımcı sınıf. FoldingFeatureAdapter, menteşe koordinatlarını normalleştirir ve mevcut duruşun HALF_OPENED, FLAT veya TABLE_TOP olup olmadığını belirler. Bu, geliştiriciyi manuel açı ve eşik hesaplamalarından kurtarır.

Jetpack Compose ile Entegrasyon

Compose uygulamaları için WindowManager, katlamayı hesaba katan WindowSizeClass ve değiştiriciler sağlar. BoxWithConstraints bileşeni, Activity yeniden oluşturulmadan gerçek zamanlı olarak ekran boyutu değişikliklerine uyum sağlar. Compose, WindowMetrics değiştiğinde otomatik olarak yeniden oluşturmayı tetikler.

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'de Uygulama Örneği

Screen Continuity desteğine sahip tam bir Activity örneğine bakalım. MainActivity üç senaryoyu işler: katlama, açma ve yarı katlanmış durum. Veriler onRetainNonConfigurationInstance aracılığıyla kaydedilir ve yeniden oluşturulduğunda geri yüklenir.

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
)

Anahtar öğe, öğe listesini ve kaydırma konumunu depolayan ContinuityState sınıfıdır. Activity, yeniden oluşturmadan önce onu kaydeder ve onCreate çağrısından hemen sonra geri yükler. WindowManager denetleyicisi duruş değişikliklerine abone olur ve düzeni modlar arasında değiştirir.

Emülatör ve Cihazda Süreklilik Testi

Android Studio, üç duruşun tümünü destekleyen bir katlanabilir cihaz emülatörü sağlar. Screen Continuity'yi test etmek için Pixel Fold veya Samsung Galaxy Z Fold türünde bir sanal cihaz oluşturun ve emülatör kontrol paneli aracılığıyla duruşları değiştirin.

Emülatör Kurulumu

Foldable kategorisiyle bir AVD oluşturun ve 7,6 inçlik bir ekran çözünürlüğü seçin. Emülatörün genişletilmiş kontrollerinde Folding Postures sekmesini açın ve duruşlar arasında geçiş yapın. Her geçiş, uygulamanın doğru şekilde işlemesi gereken bir configuration change'i tetikler.

Fiziksel Cihaz

Gerçek bir cihazda (Galaxy Z Fold 5, Pixel Fold), test fiziksel olarak katlayıp açarak yapılır. Samsung DeX ve Multi-Window modları da sürekliliği etkinleştirir. Hata ayıklama için, geçerli katlama durumunu görüntüleyen ADB komutunu adb shell dumpsys window policy kullanın.

Yaygın Sorunlar

Ana hatalar arasında RecyclerView durum kaybı, metin alanı içeriğinin sıfırlanması ve iletişim pencerelerinin kapanması bulunur. ViewModel, verileri Activity yaşam döngüsünden bağımsız olarak bellekte tutarak bu sorunları çözer. Uygulama değişiklikleri manuel olarak işliyorsa, manifest'te Activity'yi android:configChanges parametresiyle işaretlemek de önemlidir.

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

Sıkça Sorulan Sorular

Screen Continuity normal durum kaydetmeden nasıl farklıdır?

Screen Continuity, yalnızca döndürme sırasında değil, fiziksel ekran boyutu değişikliklerinde durumu kaydeder. Normal onSaveInstanceState, katlanabilir cihaz duruşları değiştirilirken durumun korunmasını garanti etmezken, ScreenContinuityController bu özel senaryoyu işler.

Hangi Android cihazlar Screen Continuity'yi destekler?

Android 10+ ve Google Play Services'e sahip tüm katlanabilir cihazlar. Destek Pixel Fold, Galaxy Z Fold serisi, Huawei Mate X, Oppo Find N ve OnePlus Open'da bulunur. Jetpack WindowManager sürüm 1.1 veya üzeri gereklidir.

Screen Continuity Jetpack Compose ile nasıl çalışır?

Jetpack Compose, rememberSaveable ve WindowSizeClass aracılığıyla Screen Continuity'yi destekler. Bileşim, WindowMetrics değişikliklerine otomatik olarak yanıt verir ve rememberSaveable, yeniden oluşturmalar arasında durumu korur. onSizeChanged değiştiricisi, gerçek zamanlı olarak boyut değişikliklerini izlemeye olanak tanır.

Screen Continuity uygulanmazsa ne olur?

Cihaz açıldığında veya katlandığında Activity durumu kaydetmeden yeniden oluşturulur. Kullanıcı girilen verileri kaybeder, kaydırma sıfırlanır ve açık iletişim kutuları kapanır. Bu, Google Play'de olumsuz yorumlara ve daha düşük uygulama puanına yol açar.

Fiziksel cihaz olmadan Screen Continuity nasıl test edilir?

Android Emulator, katlanabilir cihaz simülasyonunu destekler. Pixel Fold türünde bir AVD oluşturun, Extended Controls'ü açın ve Folding Postures sekmesini seçin. Duruşları değiştirmek bir configuration change'i tetikler ve fiziksel cihaz olmadan durum korumayı test etmenize olanak tanır.

Özet

  • Screen Continuity — katlanabilir bir cihazın fiziksel yapılandırması değiştiğinde Activity durumunu koruyan bir Android mekanizması.
  • Jetpack WindowManager, HALF_OPENED, FLAT ve TABLE_TOP duruşlarını izlemek için ScreenContinuityController sağlar.
  • onRetainNonConfigurationInstance — açma sırasında Activity yeniden oluşturulmadan önce verileri koruyan birincil yöntem.
  • ViewModel ve Compose'ta rememberSaveable, manuel yaşam döngüsü yönetimi olmadan durum kaybını çözer.
  • Android Studio Emülatörü, fiziksel cihaz olmadan tüm katlanabilir cihaz duruşlarını test etmeye olanak tanır.
  • Görmezden gelme Screen Continuity'yi göz ardı etmek, katlama sırasında UI sıfırlanmasına ve girilen verilerin kaybına yol açar.
  • Önerilir katlanabilir cihazları ve tabletleri hedefleyen tüm uygulamalara süreklilik desteği eklenmesi önerilir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun