Screen Continuity: এটি কী, ফোল্ড API এবং ইন্টারফেস অভিযোজন

লেখক: IT Sectr প্রকাশিত: 2026-06-09 পড়ার সময়: 5 মিনিট

Screen Continuity — একটি অ্যান্ড্রয়েড মেকানিজম যা ফোল্ডেবল ডিভাইসের ভাঁজ করা এবং খোলা অবস্থার মধ্যে অ্যাপের নির্বিঘ্ন স্থানান্তর নিশ্চিত করে। খোলার সময়, স্ক্রিন তার ভৌত মাত্রা পরিবর্তন করে এবং সিস্টেম নতুন কনফিগারেশন সহ Activity পুনরায় চালু করে। Google Developer, 2025 অনুযায়ী, সঠিক কন্টিনিউইটি হ্যান্ডলিং ব্যবহারকারীর অভিজ্ঞতা 40% উন্নত করে এবং অবস্থা হারানোর অভিযোগ হ্রাস করে। ScreenContinuity API Jetpack WindowManager এর অংশ যা সংস্করণ 1.1 থেকে শুরু হয় এবং ডেভেলপারকে ডিভাইস পোশ্চার পরিবর্তনের সময় লাইফসাইকেল পরিচালনা করতে দেয়।

মূল বিষয়

  • Screen Continuity — অ্যান্ড্রয়েড ফোল্ডেবল ডিভাইসে স্ক্রিনের ভৌত কনফিগারেশন পরিবর্তনের সময় Activity অবস্থা সংরক্ষণের প্রযুক্তি।
  • Jetpack WindowManager ডিভাইস পোশ্চার ট্র্যাক করার জন্য API প্রদান করে: HALF_OPENED, FLAT, TABLE_TOP।
  • onRetainNonConfigurationInstance — ভাঁজ বা খোলার পর Activity পুনরায় তৈরি হলে ডেটা সংরক্ষণের মূল পদ্ধতি।
  • পরীক্ষা কন্টিনিউইটির Android Studio এর মাধ্যমে ফোল্ডেবল ডিভাইস এমুলেটরে বা Galaxy Z Fold-এর মতো ভৌত ডিভাইসে করা হয়।
  • উপেক্ষা কন্টিনিউইটিকে স্ক্রিন অবস্থা হারানো, ফর্ম ডেটা রিসেট এবং ব্যবহারকারীর অভিজ্ঞতার অবনতি ঘটায়।

Screen Continuity কী?

Screen Continuity একটি অ্যান্ড্রয়েড মেকানিজম যা ফোল্ডেবল ডিভাইসে স্ক্রিনের ভৌত কনফিগারেশন পরিবর্তনের সময় Activity অবস্থা সংরক্ষণ করে। যখন ব্যবহারকারী ফোন খোলে বা ভাঁজ করে, সিস্টেম নতুন উইন্ডো মাত্রা সহ Activity পুনরায় চালু করতে পারে। কন্টিনিউইটি প্রবেশ করানো ডেটা, স্ক্রল অবস্থান এবং বর্তমান স্ক্রিনের ক্ষতি রোধ করে।

সাধারণ স্ক্রিন ঘূর্ণনের বিপরীতে যেখানে অ্যান্ড্রয়েড কেবল নতুন ওরিয়েন্টেশন দিয়ে Activity পুনরায় তৈরি করে, ফোল্ডেবল ডিভাইসগুলি মৌলিকভাবে নতুন পরিস্থিতি উপস্থাপন করে। HALF_OPENED পোশ্চার অ্যাপকে অর্ধেক স্ক্রিনে কাজ করতে দেয়, যখন FLAT সম্পূর্ণরূপে খোলা ট্যাবলেট মোডে কাজ করে। Screen Continuity সমর্থন ছাড়া, প্রতিটি পোশ্চার পরিবর্তন ইন্টারফেসকে তার প্রাথমিক অবস্থায় রিসেট করে।

Google I/O 2024 অনুযায়ী, 62% এরও বেশি ফোল্ডেবল ডিভাইস ব্যবহারকারী এমন অ্যাপ দেখেছেন যা অবস্থা পরিবর্তন ভুলভাবে হ্যান্ডল করে। Screen Continuity API স্তরে এই সমস্যার সমাধান করে, ডেভেলপারকে UI সংরক্ষণ এবং পুনরুদ্ধারের জন্য প্রস্তুত সরঞ্জাম প্রদান করে।

ফোল্ডেবল ডিভাইসের অবস্থা: স্ক্রিন পোশ্চার

Jetpack WindowManager FoldingFeature ক্লাসের মাধ্যমে ফোল্ডেবল ডিভাইসের জন্য তিনটি মৌলিক পোশ্চার নির্ধারণ করে। প্রতিটি পোশ্চার একটি নির্দিষ্ট ভৌত হিঞ্জ অবস্থানের সাথে মিলে যায় এবং বিশেষ ইন্টারফেস হ্যান্ডলিং প্রয়োজন।

HALF_OPENED — অর্ধেক ভাঁজ করা অবস্থা

ডিভাইসটি 30 থেকে 160 ডিগ্রি কোণে থাকে। স্ক্রিন দুটি লজিক্যাল এলাকায় বিভক্ত হয়। অ্যাপ উপরের অর্ধেকে বিষয়বস্তু এবং নিচের অর্ধেকে নিয়ন্ত্রণ প্রদর্শন করতে পারে। টেবলটপ মোড ভিডিও কল এবং মিডিয়া প্লেয়ারের জন্য এই পোশ্চার ব্যবহার করে।

FLAT — সম্পূর্ণ খোলা অবস্থা

ডিভাইসটি 180 ডিগ্রিতে খোলা থাকে, একটি বড় একক স্ক্রিন গঠন করে। অ্যাপ বর্ধিত কর্মক্ষেত্র সহ ট্যাবলেট মোডে সুইচ করে। এই পোশ্চারে, নেভিগেশন প্যানেল এবং বিস্তারিত বিষয়বস্তু পাশাপাশি দেখানো মাল্টি-পেন লেআউট দেখানোর সুপারিশ করা হয়।

TABLE_TOP — ল্যাপটপ পোশ্চার

ডিভাইসটি প্রায় 120 ডিগ্রি কোণে একটি পৃষ্ঠের উপর দাঁড়িয়ে থাকে। স্ক্রিনের নিচের অর্ধেক টাচ প্যানেল বা কীবোর্ড হিসাবে কাজ করে। টাচপ্যাড মোড এই পোশ্চারে স্ক্রিনের নিচের অংশে ট্র্যাকপ্যাড অনুকরণ করতে দেয়।

অ্যান্ড্রয়েডে স্ক্রিন কন্টিনিউইটি কীভাবে কাজ করে?

অ্যান্ড্রয়েড ফোল্ডেবল ডিভাইস কনফিগারেশন পরিবর্তনগুলি configuration changes মেকানিজমের মাধ্যমে হ্যান্ডল করে। যখন ব্যবহারকারী ফোন খোলে, সিস্টেম উইন্ডো সাইজ পরিবর্তন সনাক্ত করে এবং মানক Activity পুনর্নির্মাণ চক্র শুরু করে। Screen Continuity এই প্রক্রিয়াটিকে আটকায় এবং মূল ডেটা সংরক্ষণ করে।

অবস্থা সংরক্ষণের মূল পদ্ধতি হল onRetainNonConfigurationInstance, যা Activity ধ্বংস হওয়ার আগে কল করা হয়। ডেভেলপার এতে ডেটা মডেল, তালিকার অবস্থান এবং বর্তমান নেভিগেশন স্ক্রিন সংরক্ষণ করে। পুনর্নির্মাণের পর, Activity getLastNonConfigurationInstance-এর মাধ্যমে এই ডেটা গ্রহণ করে এবং UI ঠিক ভাঁজ করার আগের অবস্থায় পুনরুদ্ধার করে।

Fragments-এর জন্য, মেকানিজম setRetainInstance(true)-এর মাধ্যমে বাস্তবায়িত হয়, যা কনফিগারেশন পরিবর্তনে fragment ধ্বংস হওয়া রোধ করে। Jetpack Compose-এ rememberSaveable ব্যবহার করা হয়, যা 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 }
    }
}

Jetpack WindowManager-এ ScreenContinuity API

Jetpack WindowManager সংস্করণ 1.1+ ScreenContinuityController ক্লাস অন্তর্ভুক্ত করে, যা স্ক্রিন কন্টিনিউইটি পরিচালনার জন্য প্রস্তুত মেকানিজম প্রদান করে। API স্বয়ংক্রিয়ভাবে পোশ্চার পরিবর্তনগুলি হ্যান্ডল করে এবং callback ইন্টারফেসের মাধ্যমে অ্যাপকে অবহিত করে।

ScreenContinuityController

কেন্দ্রীয় ক্লাস যা পোশ্চার পরিবর্তন শ্রোতাদের নিবন্ধন করে। registerContinuityListener একটি callback গ্রহণ করে যা ফোল্ডেবল ডিভাইস অবস্থার মধ্যে প্রতিটি পরিবর্তনে সক্রিয় হয়। কন্ট্রোলার getCurrentFoldingFeature পদ্ধতির মাধ্যমে বর্তমান পোশ্চার সম্পর্কে তথ্যও প্রদান করে।

FoldingFeatureAdapter

FoldingFeature ডেটাকে অ্যাপ-পাঠযোগ্য অবস্থায় রূপান্তরের জন্য একটি ইউটিলিটি ক্লাস। FoldingFeatureAdapter হিঞ্জ স্থানাঙ্ক স্বাভাবিক করে এবং নির্ধারণ করে বর্তমান পোশ্চার HALF_OPENED, FLAT বা TABLE_TOP কিনা। এটি ডেভেলপারকে ম্যানুয়াল কোণ এবং থ্রেশোল্ড গণনা থেকে বাঁচায়।

Jetpack Compose-এর সাথে একীকরণ

Compose অ্যাপের জন্য, WindowManager WindowSizeClass এবং মডিফায়ার প্রদান করে যা ভাঁজ বিবেচনা করে। BoxWithConstraints উপাদান Activity পুনর্নির্মাণ ছাড়াই রিয়েল টাইমে স্ক্রিন সাইজ পরিবর্তনের সাথে খাপ খায়। Compose স্বয়ংক্রিয়ভাবে 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()
    }
}

Kotlin-এ বাস্তবায়নের উদাহরণ

Screen Continuity সমর্থন সহ একটি সম্পূর্ণ Activity উদাহরণ দেখি। MainActivity তিনটি পরিস্থিতি হ্যান্ডল করে: ভাঁজ করা, খোলা এবং অর্ধেক ভাঁজ করা অবস্থা। onRetainNonConfigurationInstance-এর মাধ্যমে ডেটা সংরক্ষিত হয় এবং পুনর্নির্মাণে পুনরুদ্ধার করা হয়।

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
)

মূল উপাদান হল 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 প্যারামিটার দিয়ে অ্যানোটেট করাও গুরুত্বপূর্ণ।

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

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Screen Continuity সাধারণ অবস্থা সংরক্ষণ থেকে কীভাবে আলাদা?

Screen Continuity শুধু ঘূর্ণনের সময় নয়, স্ক্রিন সাইজের ভৌত পরিবর্তনের সময় অবস্থা সংরক্ষণ করে। সাধারণ onSaveInstanceState ফোল্ডেবল ডিভাইস পোশ্চার পরিবর্তনে অবস্থা সংরক্ষণের নিশ্চয়তা দেয় না, যেখানে ScreenContinuityController এই নির্দিষ্ট পরিস্থিতি হ্যান্ডল করে।

কোন অ্যান্ড্রয়েড ডিভাইসগুলি Screen Continuity সমর্থন করে?

Android 10+ এবং Google Play Services সহ সকল ফোল্ডেবল ডিভাইস। সমর্থন Pixel Fold, Galaxy Z Fold সিরিজ, Huawei Mate X, Oppo Find N এবং OnePlus Open-এ অন্তর্ভুক্ত। Jetpack WindowManager সংস্করণ 1.1 বা তার বেশি প্রয়োজন।

Screen Continuity Jetpack Compose-এর সাথে কীভাবে কাজ করে?

Jetpack Compose rememberSaveable এবং WindowSizeClass-এর মাধ্যমে Screen Continuity সমর্থন করে। কম্পোজিশন স্বয়ংক্রিয়ভাবে WindowMetrics পরিবর্তনে সাড়া দেয়, এবং rememberSaveable পুনর্গঠনের মধ্যে অবস্থা সংরক্ষণ করে। onSizeChanged মডিফায়ার রিয়েল টাইমে সাইজ পরিবর্তন ট্র্যাক করতে দেয়।

Screen Continuity বাস্তবায়িত না হলে কী হয়?

ডিভাইস খোলা বা ভাঁজ করলে, Activity অবস্থা সংরক্ষণ না করেই পুনরায় তৈরি হয়। ব্যবহারকারী প্রবেশ করানো ডেটা হারায়, স্ক্রল রিসেট হয় এবং খোলা ডায়ালগ বন্ধ হয়ে যায়। এটি Google Play-তে নেতিবাচক পর্যালোচনা এবং অ্যাপ রেটিং কমিয়ে দেয়।

ভৌত ডিভাইস ছাড়া কীভাবে Screen Continuity পরীক্ষা করবেন?

Android Emulator ফোল্ডেবল ডিভাইস সিমুলেশন সমর্থন করে। Pixel Fold টাইপের AVD তৈরি করুন, Extended Controls খুলুন এবং Folding Postures ট্যাব নির্বাচন করুন। পোশ্চার পরিবর্তন একটি configuration change ট্রিগার করে, ভৌত ডিভাইস ছাড়াই অবস্থা সংরক্ষণ পরীক্ষা করতে দেয়।

সারাংশ

  • Screen Continuity — ফোল্ডেবল ডিভাইসের ভৌত কনফিগারেশন পরিবর্তনের সময় Activity অবস্থা সংরক্ষণের অ্যান্ড্রয়েড মেকানিজম।
  • Jetpack WindowManager HALF_OPENED, FLAT এবং TABLE_TOP পোশ্চার ট্র্যাক করার জন্য ScreenContinuityController প্রদান করে।
  • onRetainNonConfigurationInstance — খোলার সময় Activity পুনর্নির্মাণের আগে ডেটা সংরক্ষণের প্রাথমিক পদ্ধতি।
  • ViewModel এবং Compose-এ rememberSaveable ম্যানুয়াল লাইফসাইকেল ব্যবস্থাপনা ছাড়াই অবস্থা হারানোর সমস্যা সমাধান করে।
  • Android Studio Emulator ভৌত ডিভাইস ছাড়াই সমস্ত ফোল্ডেবল ডিভাইস পোশ্চার পরীক্ষা করতে দেয়।
  • উপেক্ষা Screen Continuity ভাঁজ করলে UI রিসেট এবং প্রবেশ করানো ডেটা হারানোর কারণ হয়।
  • সুপারিশকৃত ফোল্ডেবল ডিভাইস এবং ট্যাবলেটের জন্য সমস্ত অ্যাপে কন্টিনিউইটি সমর্থন যোগ করা।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন