Screen Continuity — एक एंड्रॉइड तंत्र है जो फोल्डेबल डिवाइस के मुड़ी हुई और खुली हुई अवस्थाओं के बीच ऐप का निर्बाध संक्रमण सुनिश्चित करता है। खोलने पर स्क्रीन अपने भौतिक आयाम बदलती है और सिस्टम नए कॉन्फ़िगरेशन के साथ Activity को पुनः आरंभ करता है। Google Developer, 2025 के अनुसार, कंटीन्यूइटी का सही संचालन उपयोगकर्ता अनुभव को 40% तक बढ़ाता है और स्थिति हानि की शिकायतों को कम करता है। ScreenContinuity API Jetpack WindowManager का हिस्सा है जो संस्करण 1.1 से शुरू होता है और डेवलपर को डिवाइस पॉश्चर बदलने पर जीवनचक्र प्रबंधित करने की अनुमति देता है।
मुख्य बातें
Screen Continuity एक एंड्रॉइड तंत्र है जो फोल्डेबल डिवाइसों पर स्क्रीन के भौतिक कॉन्फ़िगरेशन बदलने पर Activity स्थिति को संरक्षित करता है। जब उपयोगकर्ता फ़ोन को खोलता या मोड़ता है, सिस्टम नई विंडो आयामों के साथ Activity को पुनः आरंभ कर सकता है। कंटीन्यूइटी दर्ज किए गए डेटा, स्क्रॉल स्थिति और वर्तमान स्क्रीन की हानि को रोकती है।
सामान्य स्क्रीन घूर्णन के विपरीत जहाँ एंड्रॉइड केवल नई ओरिएंटेशन के साथ Activity को पुनः बनाता है, फोल्डेबल डिवाइस मौलिक रूप से नए परिदृश्य प्रस्तुत करते हैं। HALF_OPENED पॉश्चर ऐप को आधी स्क्रीन पर काम करने की अनुमति देता है, जबकि FLAT पूरी तरह से खुले टैबलेट मोड में संचालित होता है। Screen Continuity समर्थन के बिना, प्रत्येक पॉश्चर परिवर्तन इंटरफ़ेस को उसकी प्रारंभिक स्थिति में रीसेट कर देता है।
Google I/O 2024 के अनुसार, 62% से अधिक फोल्डेबल डिवाइस उपयोगकर्ताओं ने ऐसे ऐप देखे हैं जो स्थिति स्विचिंग को गलत तरीके से संभालते हैं। Screen Continuity API स्तर पर इस समस्या को हल करता है, डेवलपर को UI को सहेजने और पुनर्स्थापित करने के लिए तैयार उपकरण प्रदान करता है।
Jetpack WindowManager FoldingFeature वर्ग के माध्यम से फोल्डेबल डिवाइसों के लिए तीन मूल पॉश्चर परिभाषित करता है। प्रत्येक पॉश्चर हिंज की एक विशिष्ट भौतिक स्थिति से मेल खाता है और विशेष इंटरफ़ेस संचालन की आवश्यकता होती है।
डिवाइस 30 से 160 डिग्री के कोण पर है। स्क्रीन दो तार्किक क्षेत्रों में विभाजित होती है। ऐप शीर्ष आधे पर सामग्री और निचले आधे पर नियंत्रण प्रदर्शित कर सकता है। टेबलटॉप मोड वीडियो कॉल और मीडिया प्लेयर के लिए इस पॉश्चर का उपयोग करता है।
डिवाइस 180 डिग्री पर खुला है, जो एक बड़ी स्क्रीन बनाता है। ऐप बढ़े हुए कार्यक्षेत्र के साथ टैबलेट मोड में बदल जाता है। इस पॉश्चर में, नेविगेशन पैनल और विस्तृत सामग्री के साथ मल्टी-पैन लेआउट दिखाने की अनुशंसा की जाती है।
डिवाइस लगभग 120 डिग्री के कोण पर सतह पर खड़ा होता है। स्क्रीन का निचला आधा भाग टच पैनल या कीबोर्ड के रूप में कार्य करता है। टचपैड मोड इस पॉश्चर में स्क्रीन के निचले भाग पर ट्रैकपैड का अनुकरण करने की अनुमति देता है।
एंड्रॉइड फोल्डेबल डिवाइस कॉन्फ़िगरेशन परिवर्तनों को configuration changes तंत्र के माध्यम से संभालता है। जब उपयोगकर्ता फ़ोन खोलता है, सिस्टम विंडो आकार परिवर्तन का पता लगाता है और मानक Activity पुनर्निर्माण चक्र शुरू करता है। Screen Continuity इस प्रक्रिया को रोकता है और मुख्य डेटा सहेजता है।
स्थिति सहेजने की मुख्य विधि onRetainNonConfigurationInstance है, जो Activity के नष्ट होने से पहले कॉल की जाती है। डेवलपर इसमें डेटा मॉडल, सूची स्थिति और वर्तमान नेविगेशन स्क्रीन सहेजता है। पुनर्निर्माण के बाद, Activity getLastNonConfigurationInstance के माध्यम से यह डेटा प्राप्त करती है और UI को बिल्कुल मोड़ने से पहले जैसा था वैसा पुनर्स्थापित करती है।
Fragments के लिए, तंत्र setRetainInstance(true) के माध्यम से कार्यान्वित किया जाता है, जो कॉन्फ़िगरेशन परिवर्तनों पर fragment को नष्ट होने से रोकता है। Jetpack Compose में rememberSaveable का उपयोग किया जाता है, जो Window Metrics बदलने पर स्वचालित रूप से स्थिति सहेजता है।
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+ में ScreenContinuityController वर्ग शामिल है, जो स्क्रीन कंटीन्यूइटी प्रबंधित करने के लिए तैयार तंत्र प्रदान करता है। API स्वचालित रूप से पॉश्चर परिवर्तनों को संभालता है और callback इंटरफ़ेस के माध्यम से ऐप को सूचित करता है।
केंद्रीय वर्ग जो पॉश्चर परिवर्तन श्रोताओं को पंजीकृत करता है। registerContinuityListener एक callback स्वीकार करता है जो फोल्डेबल डिवाइस अवस्थाओं के बीच प्रत्येक संक्रमण पर सक्रिय होता है। नियंत्रक getCurrentFoldingFeature विधि के माध्यम से वर्तमान पॉश्चर के बारे में जानकारी भी प्रदान करता है।
FoldingFeature डेटा को ऐप-पठनीय अवस्थाओं में बदलने के लिए एक उपयोगिता वर्ग। FoldingFeatureAdapter हिंज निर्देशांक को सामान्यीकृत करता है और निर्धारित करता है कि वर्तमान पॉश्चर HALF_OPENED, FLAT या TABLE_TOP है या नहीं। यह डेवलपर को मैन्युअल कोण और थ्रेशोल्ड गणना से बचाता है।
Compose ऐप के लिए, WindowManager WindowSizeClass और मॉडिफ़ायर प्रदान करता है जो मोड़ को ध्यान में रखते हैं। BoxWithConstraints घटक Activity पुनर्निर्माण के बिना वास्तविक समय में स्क्रीन आकार परिवर्तनों के अनुकूल होता है। Compose स्वचालित रूप से WindowMetrics बदलने पर पुनर्संयोजन ट्रिगर करता है।
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 समर्थन के साथ एक पूर्ण Activity उदाहरण देखें। MainActivity तीन परिदृश्यों को संभालता है: मोड़ना, खोलना और आधा मुड़ी हुई अवस्था। डेटा onRetainNonConfigurationInstance के माध्यम से सहेजा जाता है और पुनर्निर्माण पर पुनर्स्थापित किया जाता है।
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
)
मुख्य तत्व ContinuityState वर्ग है, जो आइटम सूची और स्क्रॉल स्थिति संग्रहीत करता है। Activity इसे पुनर्निर्माण से पहले सहेजती है और onCreate कॉल करने के तुरंत बाद पुनर्स्थापित करती है। WindowManager नियंत्रक पॉश्चर परिवर्तनों की सदस्यता लेता है और मोड के बीच लेआउट बदलता है।
Android Studio तीनों पॉश्चर के समर्थन के साथ एक फोल्डेबल डिवाइस एमुलेटर प्रदान करता है। Screen Continuity का परीक्षण करने के लिए, बस Pixel Fold या Samsung Galaxy Z Fold प्रकार का एक वर्चुअल डिवाइस बनाएं और एमुलेटर नियंत्रण पैनल के माध्यम से पॉश्चर बदलें।
Foldable श्रेणी के साथ एक AVD बनाएं और 7.6-इंच स्क्रीन रिज़ॉल्यूशन चुनें। एमुलेटर के विस्तारित नियंत्रण में, Folding Postures टैब खोलें और पॉश्चर के बीच स्विच करें। प्रत्येक स्विच एक configuration change ट्रिगर करता है जिसे ऐप को सही ढंग से संभालना चाहिए।
वास्तविक डिवाइस (Galaxy Z Fold 5, Pixel Fold) पर, परीक्षण भौतिक रूप से मोड़कर और खोलकर किया जाता है। Samsung DeX और Multi-Window मोड भी कंटीन्यूइटी सक्रिय करते हैं। डीबगिंग के लिए, ADB कमांड adb shell dumpsys window policy का उपयोग करें, जो वर्तमान मोड़ स्थिति प्रदर्शित करता है।
मुख्य त्रुटियों में RecyclerView स्थिति हानि, टेक्स्ट फ़ील्ड सामग्री रीसेट और डायलॉग विंडो बंद होना शामिल है। ViewModel Activity जीवनचक्र से स्वतंत्र रूप से मेमोरी में डेटा रखकर इन समस्याओं को हल करता है। यदि ऐप मैन्युअल रूप से परिवर्तनों को संभालता है तो मेनिफ़ेस्ट में Activity को android:configChanges पैरामीटर के साथ एनोटेट करना भी महत्वपूर्ण है।
<!-- AndroidManifest.xml -->
@android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
अक्सर पूछे जाने वाले प्रश्न
Screen Continuity केवल घूर्णन के दौरान नहीं, बल्कि स्क्रीन आकार के भौतिक परिवर्तनों के दौरान स्थिति सहेजता है। सामान्य onSaveInstanceState फोल्डेबल डिवाइस पॉश्चर बदलने पर स्थिति संरक्षण की गारंटी नहीं देता, जबकि ScreenContinuityController इस विशिष्ट परिदृश्य को संभालता है।
Android 10+ और Google Play Services वाले सभी फोल्डेबल डिवाइस। समर्थन Pixel Fold, Galaxy Z Fold श्रृंखला, Huawei Mate X, Oppo Find N और OnePlus Open में शामिल है। Jetpack WindowManager संस्करण 1.1 या उच्चतर आवश्यक है।
Jetpack Compose rememberSaveable और WindowSizeClass के माध्यम से Screen Continuity का समर्थन करता है। रचना स्वचालित रूप से WindowMetrics परिवर्तनों पर प्रतिक्रिया करती है, और rememberSaveable पुनर्संयोजनों के बीच स्थिति संरक्षित करता है। onSizeChanged मॉडिफ़ायर वास्तविक समय में आकार परिवर्तनों को ट्रैक करने की अनुमति देता है।
जब डिवाइस खोला या मोड़ा जाता है, Activity स्थिति सहेजे बिना पुनः बनाई जाती है। उपयोगकर्ता दर्ज किया गया डेटा खो देता है, स्क्रॉल रीसेट हो जाता है, और खुले डायलॉग बंद हो जाते हैं। इससे नकारात्मक समीक्षाएँ और Google Play पर ऐप रेटिंग में गिरावट आती है।
Android Emulator फोल्डेबल डिवाइस सिमुलेशन का समर्थन करता है। Pixel Fold प्रकार का AVD बनाएं, Extended Controls खोलें और Folding Postures टैब चुनें। पॉश्चर बदलने से configuration change ट्रिगर होता है, जिससे भौतिक डिवाइस के बिना स्थिति संरक्षण का परीक्षण किया जा सकता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें