Screen Continuity: apa itu, API lipatan dan adaptasi antarmuka

Penulis: IT Sectr Diterbitkan: 2026-06-09 Waktu membaca: 5 mnt

Screen Continuity — mekanisme Android yang memastikan transisi mulus aplikasi antara keadaan terlipat dan terbuka perangkat lipat. Saat dibuka, layar mengubah ukuran fisiknya dan sistem memulai ulang Activity dengan konfigurasi baru. Menurut Google Developer, 2025, penanganan kontinuitas yang benar meningkatkan pengalaman pengguna sebesar 40% dan mengurangi jumlah keluhan tentang pengaturan ulang status. API ScreenContinuity termasuk dalam Jetpack WindowManager mulai versi 1.1 dan memungkinkan pengembang mengelola siklus hidup saat perubahan posisi perangkat.

Poin Utama

  • Screen Continuity — teknologi mempertahankan status Activity saat perubahan konfigurasi fisik layar pada perangkat Android lipat.
  • Jetpack WindowManager menyediakan API untuk melacak posisi perangkat: HALF_OPENED, FLAT, TABLE_TOP.
  • onRetainNonConfigurationInstance — metode kunci untuk menyimpan data saat pembuatan ulang Activity setelah melipat atau membuka.
  • Pengujian kontinuitas dilakukan pada emulator perangkat lipat melalui Android Studio atau pada perangkat fisik Galaxy Z Fold.
  • Mengabaikan kontinuitas menyebabkan hilangnya status layar, pengaturan ulang data formulir dan penurunan pengalaman pengguna.

Apa itu Screen Continuity?

Screen Continuity adalah mekanisme Android yang mempertahankan status Activity saat perubahan konfigurasi fisik layar pada perangkat lipat. Saat pengguna membuka atau melipat telepon, sistem dapat memulai ulang Activity dengan ukuran jendela baru. Kontinuitas mencegah hilangnya data yang dimasukkan, posisi gulir, dan layar saat ini.

Tidak seperti rotasi layar biasa, di mana Android cukup membuat ulang Activity dengan orientasi baru, perangkat lipat memperkenalkan skenario yang benar-benar baru. Pose HALF_OPENED memungkinkan aplikasi bekerja di setengah layar, dan FLAT — dalam mode tablet yang terbuka penuh. Tanpa dukungan Screen Continuity, setiap perubahan pose mereset antarmuka ke keadaan awal.

Menurut Google I/O 2024, lebih dari 62% pengguna perangkat lipat pernah mengalami aplikasi yang tidak menangani peralihan antar keadaan dengan benar. Screen Continuity memecahkan masalah ini di tingkat API, menyediakan alat siap pakai kepada pengembang untuk menyimpan dan memulihkan UI.

Keadaan perangkat lipat: pose layar

Jetpack WindowManager mendefinisikan tiga pose dasar perangkat lipat melalui kelas FoldingFeature. Setiap pose sesuai dengan posisi fisik tertentu dari engsel dan memerlukan penanganan antarmuka khusus.

HALF_OPENED — keadaan setengah terbuka

Perangkat berada pada sudut 30 hingga 160 derajat. Layar terbagi menjadi dua area logis. Aplikasi dapat menampilkan konten di bagian atas dan kontrol di bagian bawah. Mode Tabletop untuk panggilan video dan pemutar media menggunakan pose ini.

FLAT — keadaan terbuka penuh

Perangkat terbuka 180 derajat, membentuk satu layar besar. Aplikasi beralih ke mode tablet dengan area kerja yang diperbesar. Dalam pose ini disarankan untuk menampilkan tata letak multi-panel dengan bilah navigasi dan konten detail berdampingan.

TABLE_TOP — pose laptop

Perangkat berdiri di permukaan pada sudut sekitar 120 derajat. Bagian bawah layar berfungsi sebagai panel sentuh atau keyboard. Mode Touchpad dalam pose ini memungkinkan emulasi trackpad di bagian bawah layar.

Bagaimana kontinuitas layar bekerja di Android?

Android menangani perubahan konfigurasi perangkat lipat melalui mekanisme configuration changes. Saat pengguna membuka telepon, sistem mencatat perubahan ukuran jendela dan memulai siklus standar pembuatan ulang Activity. Screen Continuity mencegat proses ini dan menyimpan data penting.

Metode utama untuk menyimpan status adalah onRetainNonConfigurationInstance, yang dipanggil sebelum Activity dihancurkan. Pengembang menyimpan model data, posisi daftar, dan layar navigasi saat ini di dalamnya. Setelah pembuatan ulang, Activity menerima data ini melalui getLastNonConfigurationInstance dan memulihkan UI persis hingga saat pelipatan.

Untuk Fragments, mekanisme ini diimplementasikan melalui setRetainInstance(true), yang mencegah penghancuran fragment saat perubahan konfigurasi. Di Jetpack Compose digunakan rememberSaveable, yang secara otomatis menyimpan status saat perubahan Window Metrics.

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

API ScreenContinuity di Jetpack WindowManager

Jetpack WindowManager versi 1.1+ menyertakan kelas ScreenContinuityController, yang menyediakan mekanisme siap pakai untuk mengelola kontinuitas layar. API secara otomatis menangani perubahan pose dan memberi tahu aplikasi melalui antarmuka callback.

ScreenContinuityController

Kelas pusat yang mendaftarkan pendengar perubahan pose. registerContinuityListener menerima callback yang dipicu pada setiap transisi antara keadaan perangkat lipat. Kontroler juga menyediakan informasi tentang pose saat ini melalui metode getCurrentFoldingFeature.

FoldingFeatureAdapter

Kelas utilitas untuk mengubah data FoldingFeature menjadi keadaan yang dapat dipahami aplikasi. FoldingFeatureAdapter menormalkan koordinat engsel dan menentukan apakah pose saat ini adalah HALF_OPENED, FLAT atau TABLE_TOP. Ini membebaskan pengembang dari perhitungan manual sudut dan nilai ambang batas.

Integrasi dengan Jetpack Compose

Untuk aplikasi Compose, WindowManager menyediakan WindowSizeClass dan pengubah yang mempertimbangkan lipatan. Komponen BoxWithConstraints beradaptasi terhadap perubahan ukuran layar secara real-time tanpa membuat ulang Activity. Compose secara otomatis memicu rekomposisi saat perubahan WindowMetrics.

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

Contoh implementasi di Kotlin

Mari kita lihat contoh lengkap Activity dengan dukungan Screen Continuity. MainActivity menangani tiga skenario: melipat, membuka, dan keadaan setengah terbuka. Data disimpan melalui onRetainNonConfigurationInstance dan dipulihkan saat pembuatan ulang.

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
)

Elemen kuncinya adalah kelas ContinuityState, yang menyimpan daftar elemen dan posisi gulir. Activity menyimpannya sebelum pembuatan ulang dan memulihkannya segera setelah pemanggilan onCreate. Kontroler WindowManager berlangganan perubahan pose dan mengalihkan tata letak antar mode.

Menguji kontinuitas pada emulator dan perangkat

Android Studio menyediakan emulator perangkat lipat dengan dukungan untuk ketiga pose. Untuk menguji Screen Continuity, cukup buat perangkat virtual dengan tipe Pixel Fold atau Samsung Galaxy Z Fold dan alihkan pose melalui panel kontrol emulator.

Pengaturan emulator

Buat AVD dengan kategori Foldable dan pilih resolusi layar 7,6 inci. Di kontrol lanjutan emulator, buka tab Folding Postures dan alihkan antar pose. Setiap peralihan memicu configuration change yang harus ditangani dengan benar oleh aplikasi.

Perangkat fisik

Pada perangkat nyata (Galaxy Z Fold 5, Pixel Fold) pengujian dilakukan dengan membuka secara fisik. Mode Samsung DeX dan Multi-Window juga mengaktifkan kontinuitas. Untuk debugging, gunakan perintah ADB adb shell dumpsys window policy yang menampilkan status lipatan saat ini.

Masalah umum

Kesalahan utama — hilangnya status RecyclerView, pengaturan ulang teks di bidang teks dan penutupan dialog. ViewModel memecahkan masalah ini dengan menyimpan data di memori terlepas dari siklus hidup Activity. Juga penting untuk menandai Activity di manifes dengan parameter android:configChanges jika aplikasi menangani perubahan secara manual.

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

Pertanyaan yang Sering Diajukan

Apa perbedaan Screen Continuity dengan penyimpanan status biasa?

Screen Continuity menyimpan status saat perubahan fisik ukuran layar, bukan hanya saat rotasi. onSaveInstanceState biasa tidak menjamin penyimpanan saat peralihan pose perangkat lipat, sedangkan ScreenContinuityController menangani skenario ini.

Perangkat Android apa yang mendukung Screen Continuity?

Semua perangkat lipat dengan Android 10+ dan layanan Google Play. Dukungan termasuk dalam Pixel Fold, seri Galaxy Z Fold, Huawei Mate X, Oppo Find N dan OnePlus Open. Untuk bekerja diperlukan Jetpack WindowManager versi 1.1 dan lebih tinggi.

Bagaimana Screen Continuity bekerja dengan Jetpack Compose?

Jetpack Compose mendukung Screen Continuity melalui rememberSaveable dan WindowSizeClass. Komposisi secara otomatis merespons perubahan WindowMetrics dan rememberSaveable menyimpan status antar rekomposisi. Pengubah onSizeChanged memungkinkan melacak perubahan ukuran secara real-time.

Apa yang terjadi jika Screen Continuity tidak diimplementasikan?

Saat membuka atau melipat perangkat, Activity dibuat ulang tanpa menyimpan status. Pengguna kehilangan data yang dimasukkan, gulir diatur ulang, dialog yang terbuka ditutup. Ini menyebabkan ulasan negatif dan penurunan peringkat aplikasi di Google Play.

Bagaimana cara menguji Screen Continuity tanpa perangkat fisik?

Android Emulator mendukung simulasi perangkat lipat. Buat AVD dengan tipe Pixel Fold, buka Extended Controls dan pilih tab Folding Postures. Peralihan pose memicu configuration change, memungkinkan pengujian penyimpanan status tanpa perangkat fisik.

Ringkasan

  • Screen Continuity — mekanisme Android untuk mempertahankan status Activity saat perubahan konfigurasi fisik perangkat lipat.
  • Jetpack WindowManager menyediakan ScreenContinuityController untuk melacak pose HALF_OPENED, FLAT dan TABLE_TOP.
  • onRetainNonConfigurationInstance — metode utama untuk menyimpan data sebelum pembuatan ulang Activity saat membuka.
  • ViewModel dan rememberSaveable di Compose memecahkan masalah kehilangan status tanpa pengelolaan siklus hidup manual.
  • Emulator Android Studio memungkinkan pengujian semua pose perangkat lipat tanpa perangkat fisik.
  • Mengabaikan Screen Continuity menyebabkan pengaturan ulang antarmuka pengguna dan hilangnya data yang dimasukkan saat melipat.
  • Disarankan menambahkan dukungan kontinuitas ke semua aplikasi yang ditargetkan untuk perangkat lipat dan tablet.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga