অ্যান্ড্রয়েড অ্যাপ রিসাইজ করা

1. ভূমিকা

অ্যান্ড্রয়েড ডিভাইস ইকোসিস্টেম সবসময় বিকশিত হয়। বিল্ট-ইন হার্ডওয়্যার কীবোর্ডের প্রথম দিন থেকে শুরু করে ফ্লিপাবল, ফোল্ডেবল, ট্যাবলেট এবং ফ্রি-ফর্ম রিসাইজ করা যায় এমন উইন্ডোর আধুনিক ল্যান্ডস্কেপ — অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি এখনকার চেয়ে বেশি বৈচিত্র্যময় ডিভাইসে কখনও চলেনি৷

যদিও এটি ডেভেলপারদের জন্য দারুণ খবর, কিছু নির্দিষ্ট অ্যাপ অপ্টিমাইজেশান ব্যবহারযোগ্যতার প্রত্যাশা পূরণ করতে এবং বিভিন্ন স্ক্রীনের মাপ জুড়ে একটি চমৎকার ব্যবহারকারীর অভিজ্ঞতার জন্য প্রয়োজন। প্রতিটি নতুন ডিভাইসকে একবারে লক্ষ্য করার পরিবর্তে, একটি প্রতিক্রিয়াশীল/অভিযোজিত UI এবং স্থিতিস্থাপক আর্কিটেকচার আপনার বর্তমান এবং ভবিষ্যত ব্যবহারকারীরা যেখানেই আছে - যে কোনো আকার এবং আকৃতির ডিভাইসে আপনার অ্যাপটিকে সুন্দর করে তুলতে এবং কাজ করতে সাহায্য করতে পারে!

ফ্রি-ফর্ম রিসাইজেবল অ্যান্ড্রয়েড এনভায়রনমেন্টের সূচনা হল আপনার প্রতিক্রিয়াশীল/অভিযোজিত UI পরীক্ষা করার জন্য এটিকে যেকোনো ডিভাইসের জন্য প্রস্তুত করার জন্য চাপ দেওয়ার একটি দুর্দান্ত উপায়। এই কোড ল্যাবটি আপনাকে রিসাইজ করার প্রভাব বোঝার পাশাপাশি একটি অ্যাপকে দৃঢ়ভাবে এবং সহজে রিসাইজ করার জন্য কিছু সর্বোত্তম অনুশীলন বাস্তবায়নের মাধ্যমে গাইড করবে।

যা আপনি নির্মাণ করবেন

আপনি ফ্রি-ফর্ম রিসাইজের প্রভাবগুলি অন্বেষণ করবেন এবং আকার পরিবর্তনের জন্য সর্বোত্তম অনুশীলনগুলি প্রদর্শন করতে একটি Android অ্যাপ অপ্টিমাইজ করবেন৷ আপনার অ্যাপ হবে:

একটি সামঞ্জস্যপূর্ণ ম্যানিফেস্ট আছে

  • সীমাবদ্ধতাগুলি সরান যা একটি অ্যাপকে অবাধে আকার পরিবর্তন করতে সক্ষম হতে বাধা দেয়

আকার পরিবর্তন করার সময় অবস্থা বজায় রাখুন

  • স্মরণ সংরক্ষণযোগ্য ব্যবহার করে পুনরায় আকার দেওয়ার সময় UI অবস্থা বজায় রাখে
  • UI আরম্ভ করার জন্য অপ্রয়োজনীয়ভাবে পটভূমির কাজ নকল করা এড়িয়ে চলুন

আপনি কি প্রয়োজন হবে

  1. মৌলিক অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরির জ্ঞান
  2. কম্পোজে ViewModel এবং State এর জ্ঞান
  3. একটি পরীক্ষা ডিভাইস যা ফ্রি-ফর্ম উইন্ডোর আকার পরিবর্তন সমর্থন করে যেমন নিম্নলিখিতগুলির মধ্যে একটি:

আপনি যদি এই কোডল্যাবের মাধ্যমে কাজ করার সময় কোনো সমস্যায় পড়েন (কোড বাগ, ব্যাকরণগত ত্রুটি, অস্পষ্ট শব্দ, ইত্যাদি), তাহলে অনুগ্রহ করে কোডল্যাবের নীচের বাম কোণে একটি ভুল প্রতিবেদন করুন লিঙ্কের মাধ্যমে সমস্যাটি রিপোর্ট করুন৷

2. শুরু করা

GitHub থেকে সংগ্রহস্থল ক্লোন করুন।

git clone https://github.com/android/large-screen-codelabs/

...অথবা সংগ্রহস্থলের একটি জিপ ফাইল ডাউনলোড করুন এবং এটি বের করুন

আমদানি প্রকল্প

  • অ্যান্ড্রয়েড স্টুডিও খুলুন
  • আমদানি প্রকল্প বা ফাইল->নতুন->আমদানি প্রকল্প বেছে নিন
  • আপনি যেখানে প্রকল্পটি ক্লোন করেছেন বা বের করেছেন সেখানে নেভিগেট করুন
  • আকার পরিবর্তন ফোল্ডার খুলুন.
  • স্টার্ট ফোল্ডারে প্রকল্পটি খুলুন। এতে স্টার্টার কোড রয়েছে।

অ্যাপটি ব্যবহার করে দেখুন

  • অ্যাপটি তৈরি করুন এবং চালান
  • অ্যাপটির আকার পরিবর্তন করার চেষ্টা করুন

আপনি কি মনে করেন?

আপনার পরীক্ষা ডিভাইসের সামঞ্জস্যতা সমর্থনের উপর নির্ভর করে, আপনি সম্ভবত লক্ষ্য করেছেন যে ব্যবহারকারীর অভিজ্ঞতা আদর্শ নয়। অ্যাপটির আকার পরিবর্তন করা যাচ্ছে না এবং প্রাথমিক আকৃতির অনুপাতের মধ্যে আটকে আছে। কি হচ্ছে?

সীমাবদ্ধতা প্রকাশ করুন

আপনি যদি অ্যাপের AndroidManifest.xml ফাইলটি দেখেন, আপনি দেখতে পাবেন যে কিছু বিধিনিষেধ যুক্ত করা হয়েছে যা আমাদের অ্যাপকে একটি ফ্রি-ফর্ম উইন্ডো আকার পরিবর্তনের পরিবেশে ভাল আচরণ করতে বাধা দিচ্ছে।

AndroidManifest.xml

            android:maxAspectRatio="1.4"
            android:resizeableActivity="false"
            android:screenOrientation="portrait">

আপনার ম্যানিফেস্ট থেকে এই তিনটি সমস্যাযুক্ত লাইন সরানোর চেষ্টা করুন, অ্যাপটি পুনরায় তৈরি করুন এবং আপনার পরীক্ষা ডিভাইসে আবার চেষ্টা করুন। আপনি লক্ষ্য করবেন যে অ্যাপটি আর ফ্রি-ফর্ম রিসাইজ করা থেকে সীমাবদ্ধ নয়। আপনার ম্যানিফেস্ট থেকে এই ধরনের বিধিনিষেধ অপসারণ করা ফ্রি-ফর্ম উইন্ডো রিসাইজ করার জন্য আপনার অ্যাপটিকে অপ্টিমাইজ করার একটি গুরুত্বপূর্ণ পদক্ষেপ।

3. আকার পরিবর্তনের কনফিগারেশন পরিবর্তন

যখন আপনার অ্যাপের উইন্ডোর আকার পরিবর্তন করা হয়, তখন আপনার অ্যাপের কনফিগারেশন আপডেট করা হয়। এই আপডেটগুলি আপনার অ্যাপের জন্য প্রভাব ফেলে। সেগুলি বোঝা এবং অনুমান করা আপনার ব্যবহারকারীদের একটি দুর্দান্ত অভিজ্ঞতা প্রদান করতে সহায়তা করতে পারে৷ সবচেয়ে সুস্পষ্ট পরিবর্তনগুলি হল আপনার অ্যাপ উইন্ডোর প্রস্থ এবং উচ্চতা, তবে এই পরিবর্তনগুলির আকৃতির অনুপাত এবং অভিযোজনের ক্ষেত্রেও প্রভাব রয়েছে৷

কনফিগারেশন পরিবর্তন পর্যবেক্ষণ

অ্যান্ড্রয়েড ভিউ সিস্টেমের সাথে তৈরি একটি অ্যাপে এই পরিবর্তনগুলি নিজে ঘটছে তা দেখতে, আপনি View.onConfigurationChanged ওভাররাইড করতে পারেন। জেটপ্যাক কম্পোজে, আমাদের কাছে LocalConfiguration.current অ্যাক্সেস আছে, যা View.onConfigurationChanged কল করা হলে স্বয়ংক্রিয়ভাবে আপডেট হয়।

আপনার নমুনা অ্যাপে এই কনফিগারেশন পরিবর্তনগুলি দেখতে, আপনার অ্যাপে একটি সংমিশ্রণযোগ্য যোগ করুন যা LocalConfiguration.current থেকে মানগুলি প্রদর্শন করে, বা এই ধরনের একটি কম্পোজেবল সহ একটি নতুন নমুনা প্রকল্প তৈরি করুন৷ এইগুলি দেখার জন্য একটি উদাহরণ UI এরকম কিছু হবে:

val configuration = LocalConfiguration.current
val isPortrait = configuration.orientation ==
    Configuration.ORIENTATION_PORTRAIT
val screenLayoutSize =
        when (configuration.screenLayout and
                Configuration.SCREENLAYOUT_SIZE_MASK) {
            SCREENLAYOUT_SIZE_SMALL -> "SCREENLAYOUT_SIZE_SMALL"
            SCREENLAYOUT_SIZE_NORMAL -> "SCREENLAYOUT_SIZE_NORMAL"
            SCREENLAYOUT_SIZE_LARGE -> "SCREENLAYOUT_SIZE_LARGE"
            SCREENLAYOUT_SIZE_XLARGE -> "SCREENLAYOUT_SIZE_XLARGE"
            else -> "undefined value"
        }
Column(
    horizontalAlignment = Alignment.CenterHorizontally,
    modifier = Modifier.fillMaxWidth()
) {
    Text("screenWidthDp: ${configuration.screenWidthDp}")
    Text("screenHeightDp: ${configuration.screenHeightDp}")
    Text("smallestScreenWidthDp: ${configuration.smallestScreenWidthDp}")
    Text("orientation: ${if (isPortrait) "portrait" else "landscape"}")
    Text("screenLayout SIZE: $screenLayoutSize")
}

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

অ্যাপটির আকার পরিবর্তন করা হলে, পরিবর্তনশীল কনফিগারেশন তথ্য রিয়েল টাইমে অ্যাপের ইন্টারফেসে প্রদর্শিত হয়

আপনার অ্যাপের কনফিগারেশনের এই পরিবর্তনগুলি আপনাকে একটি ছোট হ্যান্ডসেটে একটি স্প্লিট স্ক্রীনের মাধ্যমে একটি ট্যাবলেট বা ডেস্কটপে পূর্ণ স্ক্রীনের সাথে আমরা আশা করি এমন চরম থেকে দ্রুত সরানোর অনুকরণ করতে দেয়৷ এটি শুধুমাত্র স্ক্রীন জুড়ে আপনার অ্যাপের লেআউট পরীক্ষা করার একটি ভাল উপায় নয়, এটি আপনাকে পরীক্ষা করার অনুমতি দেয় যে আপনার অ্যাপটি দ্রুত কনফিগারেশন পরিবর্তন ইভেন্টগুলিকে কতটা ভালভাবে পরিচালনা করতে পারে।

4. লগিং কার্যকলাপ জীবনচক্র ঘটনা

আপনার অ্যাপের জন্য ফ্রি-ফর্ম উইন্ডোর আকার পরিবর্তনের আরেকটি প্রভাব হল আপনার অ্যাপের জন্য ঘটবে এমন বিভিন্ন Activity জীবনচক্র পরিবর্তন। রিয়েল টাইমে এই পরিবর্তনগুলি দেখতে, আপনার onCreate পদ্ধতিতে একজন লাইফসাইকেল পর্যবেক্ষক যোগ করুন এবং onStateChanged ওভাররাইড করে প্রতিটি নতুন জীবনচক্র ইভেন্ট লগ করুন।

lifecycle.addObserver(object : LifecycleEventObserver {
        override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        Log.d("resizing-codelab-lifecycle", "$event was called")
    }
})

এই লগ ইন করার জায়গায়, আপনার পরীক্ষা ডিভাইসে আবার আপনার অ্যাপ চালান, এবং logcat দেখুন যখন আপনি আপনার অ্যাপটিকে ছোট করার চেষ্টা করছেন এবং এটিকে আবার অগ্রভাগে নিয়ে আসবেন।

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

logcat ক্রিয়াকলাপ লাইফসাইকেল পদ্ধতিগুলি দেখায় যখন আকার পরিবর্তন করা হয়

এখন Logcat দেখুন যখন আপনি আপনার অ্যাপটিকে তার সম্ভাব্য ক্ষুদ্রতম আকার থেকে সম্ভাব্য বৃহত্তম আকারে আকার পরিবর্তন করেন তখন কোন কার্যকলাপের লাইফসাইকেল কলব্যাকগুলি বলা হয়

আপনার পরীক্ষা ডিভাইসের উপর নির্ভর করে, আপনি বিভিন্ন আচরণ পর্যবেক্ষণ করতে পারেন, কিন্তু আপনি সম্ভবত লক্ষ্য করেছেন যে আপনার অ্যাপ্লিকেশানের উইন্ডোর আকার উল্লেখযোগ্যভাবে পরিবর্তিত হলে আপনার কার্যকলাপ ধ্বংস হয়ে পুনরায় তৈরি করা হয়, কিন্তু যখন এটি সামান্য পরিবর্তিত হয় তখন নয়। এর কারণ হল, API 24+ এ, শুধুমাত্র উল্লেখযোগ্য আকার পরিবর্তনের ফলে Activity বিনোদন হয়

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

কনফিগারেশন পরিবর্তনের সাথে সম্পর্কিত কিছু জটিলতাকে বিমূর্ত করতে, আপনার অভিযোজিত UI বাস্তবায়নের জন্য WindowSizeClass- এর মতো উচ্চ স্তরের API ব্যবহার করুন। (এছাড়াও দেখুন বিভিন্ন স্ক্রীন আকার সমর্থন করে ।)

5. ধারাবাহিকতা - আকার পরিবর্তন করার সময় কম্পোজেবলের অভ্যন্তরীণ অবস্থা বজায় রাখা

পূর্ববর্তী বিভাগে, আপনি কিছু কনফিগারেশন পরিবর্তন দেখেছেন যা আপনার অ্যাপটি একটি ফ্রি-ফর্ম উইন্ডো রিসাইজিং পরিবেশে আশা করতে পারে। এই বিভাগে, আপনি এই পরিবর্তনগুলি জুড়ে আপনার অ্যাপের UI অবস্থা অবিচ্ছিন্ন রাখবেন।

NavigationDrawerHeader কম্পোজযোগ্য ফাংশন তৈরি করে শুরু করুন ( ReplyHomeScreen.kt তে পাওয়া যায়) ক্লিক করার সময় ইমেল ঠিকানা দেখানোর জন্য প্রসারিত করুন।

@Composable
private fun NavigationDrawerHeader(
    modifier: Modifier = Modifier
) {
    var showDetails by remember { mutableStateOf(false) }
    Column(
        modifier = modifier.clickable {
                showDetails = !showDetails
            }
    ) {


        Row(
            horizontalArrangement = Arrangement.SpaceBetween,
            verticalAlignment = Alignment.CenterVertically
        ) {
            ReplyLogo(
                modifier = Modifier
                    .size(dimensionResource(R.dimen.reply_logo_size))
            )
            ReplyProfileImage(
                drawableResource = LocalAccountsDataProvider
                    .userAccount.avatar,
                description = stringResource(id = R.string.profile),
                modifier = Modifier
                    .size(dimensionResource(R.dimen.profile_image_size))
            )
        }
        AnimatedVisibility (showDetails) {
            Text(
                text = stringResource(id = LocalAccountsDataProvider
                        .userAccount.email),
                style = MaterialTheme.typography.labelMedium,
                modifier = Modifier
                    .padding(
                        start = dimensionResource(
                            R.dimen.drawer_padding_header),
                        end = dimensionResource(
                            R.dimen.drawer_padding_header),
                        bottom = dimensionResource(
                            R.dimen.drawer_padding_header)
                ),


            )
        }
    }
}

আপনি যখন আপনার অ্যাপে প্রসারণযোগ্য শিরোনাম যোগ করেন,

  1. আপনার পরীক্ষা ডিভাইসে অ্যাপ্লিকেশন চালান
  2. এটি প্রসারিত করতে হেডারে আলতো চাপুন
  3. উইন্ডোর আকার পরিবর্তন করার চেষ্টা করুন

আপনি দেখতে পাবেন যে উল্লেখযোগ্যভাবে আকার পরিবর্তন করা হলে হেডারটি তার অবস্থা হারায়।

অ্যাপের নেভিগেশন ড্রয়ারের শিরোনামটি ট্যাপ করা হয় এবং প্রসারিত হয়, কিন্তু অ্যাপটির আকার পরিবর্তন করার পরে এটি ভেঙে যায়

UI অবস্থা হারিয়ে গেছে এই কারণে যে remember আপনাকে পুনর্গঠন জুড়ে অবস্থা ধরে রাখতে সাহায্য করে, কিন্তু কার্যকলাপ বা প্রক্রিয়া বিনোদন জুড়ে নয়। কম্পোজেবলকে স্টেটলেস করার জন্য স্টেট হোস্টিং ব্যবহার করা, কম্পোজেবলের কলারে স্টেট সরানো সাধারণ, যা এই সমস্যাটিকে সম্পূর্ণরূপে এড়াতে পারে। এটি বলার সাথে সাথে, আপনি কম্পোজেবল ফাংশনগুলির অভ্যন্তরীণ UI এলিমেন্ট স্টেট রাখার সময় জায়গায় remember ব্যবহার করতে পারেন।

এই সমস্যাগুলি সমাধান করার জন্য, remember প্রতিস্থাপন করুন স্মরণ rememberSaveable দিয়ে। এটি কাজ করে কারণ rememberSaveable মনে রাখা মানটিকে savedInstanceState এ সংরক্ষণ করে এবং পুনরুদ্ধার করে। remember rememberSaveable পরিবর্তন করুন, পরীক্ষা ডিভাইসে আপনার অ্যাপ চালান এবং আবার অ্যাপটির আকার পরিবর্তন করার চেষ্টা করুন। আপনি লক্ষ্য করবেন যে প্রসারণযোগ্য শিরোলেখের অবস্থাটি পুনরায় আকার দেওয়ার সময় সংরক্ষিত থাকে, যেমনটি উদ্দেশ্য ছিল।

6. ব্যাকগ্রাউন্ড কাজের অপ্রয়োজনীয় নকল এড়িয়ে চলা

আপনি দেখেছেন যে কনফিগারেশন পরিবর্তনের মাধ্যমে কম্পোজেবলের অভ্যন্তরীণ UI অবস্থা সংরক্ষণ করতে আপনি কীভাবে rememberSaveable ব্যবহার করতে পারেন যা ফ্রি-ফর্ম উইন্ডোর আকার পরিবর্তনের ফলে ঘন ঘন ঘটতে পারে। যাইহোক, একটি অ্যাপের প্রায়ই UI অবস্থা এবং যুক্তিকে কম্পোজেবল থেকে দূরে রাখা উচিত। রাষ্ট্রের মালিকানাকে একটি ভিউমডেলে স্থানান্তর করা হল রিসাইজ করার সময় রাষ্ট্রকে সংরক্ষণ করার সেরা উপায়গুলির মধ্যে একটি। আপনি যখন আপনার রাজ্যকে একটি ViewModel এ উত্তোলন করেন, তখন আপনি দীর্ঘ-চলমান ব্যাকগ্রাউন্ডের কাজ যেমন ভারী ফাইল সিস্টেম অ্যাক্সেস বা আপনার স্ক্রীন শুরু করার জন্য প্রয়োজনীয় নেটওয়ার্ক কলগুলির সাথে সমস্যার সম্মুখীন হতে পারেন।

আপনি যে ধরনের সমস্যার সম্মুখীন হতে পারেন তার একটি উদাহরণ দেখতে, ReplyViewModelinitializeUIState পদ্ধতিতে একটি লগ স্টেটমেন্ট যোগ করুন।

fun initializeUIState() {
    Log.d("resizing-codelab", "initializeUIState() called in the viewmodel")
    val mailboxes: Map<MailboxType, List<Email>> =
        LocalEmailsDataProvider.allEmails.groupBy { it.mailbox }
    _uiState.value =
        ReplyUiState(
            mailboxes = mailboxes,
            currentSelectedEmail = mailboxes[MailboxType.Inbox]?.get(0)
                ?: LocalEmailsDataProvider.defaultEmail
        )
}

এখন আপনার পরীক্ষা ডিভাইসে অ্যাপটি চালান, এবং আপনার অ্যাপের উইন্ডোর আকার পরিবর্তন করার চেষ্টা করুন কয়েকবার।

আপনি যখন Logcat দেখবেন, আপনি লক্ষ্য করবেন যে আপনার অ্যাপটি দেখায় যে শুরুর পদ্ধতিটি বেশ কয়েকবার চালানো হয়েছে। আপনার UI আরম্ভ করার জন্য আপনি শুধুমাত্র একবার চালাতে চান এমন কাজের জন্য এটি একটি সমস্যা হতে পারে। অতিরিক্ত নেটওয়ার্ক কল, ফাইল I/O বা অন্যান্য কাজ ডিভাইসের কর্মক্ষমতা বাধাগ্রস্ত করতে পারে এবং অন্যান্য অনিচ্ছাকৃত সমস্যার কারণ হতে পারে।

অপ্রয়োজনীয় ব্যাকগ্রাউন্ডের কাজ এড়াতে, আপনার কার্যকলাপের onCreate() পদ্ধতি থেকে initializeUIState() কলটি সরিয়ে দিন। পরিবর্তে, ViewModel এর init পদ্ধতিতে ডেটা শুরু করুন। এটি নিশ্চিত করে যে সূচনা পদ্ধতি শুধুমাত্র একবার চলে, যখন ReplyViewModel প্রথম সূচনা করা হয়:

init {
    initializeUIState()
}

অ্যাপটি আবার চালানোর চেষ্টা করুন, এবং আপনি দেখতে পাচ্ছেন যে অপ্রয়োজনীয় সিমুলেটেড ইনিশিয়ালাইজেশন টাস্কটি শুধুমাত্র একবারই চলে, আপনি আপনার অ্যাপের উইন্ডোর আকার পরিবর্তন করুন না কেন। এর কারণ হল ViewModels Activity জীবনচক্রের বাইরেও টিকে থাকে। ViewModel তৈরির সময় শুধুমাত্র একবার ইনিশিয়ালাইজিং কোড চালানোর মাধ্যমে, আমরা এটিকে যেকোনো Activity থেকে আলাদা করি এবং অপ্রয়োজনীয় কাজ প্রতিরোধ করি। যদি এটি আসলে একটি ব্যয়বহুল সার্ভার কল বা আপনার UI শুরু করার জন্য একটি ভারী ফাইল I/O অপারেশন হয়, তাহলে আপনি উল্লেখযোগ্য সংস্থানগুলি সংরক্ষণ করবেন এবং আপনার ব্যবহারকারীর অভিজ্ঞতা উন্নত করবেন।

7. অভিনন্দন!

আপনি এটা করেছেন! দারুণ কাজ! আপনি এখন ChromeOS এবং অন্যান্য মাল্টি-উইন্ডো, মাল্টি-স্ক্রিন পরিবেশে অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলিকে ভালভাবে আকার পরিবর্তন করতে সক্ষম করার জন্য কিছু সেরা অনুশীলন প্রয়োগ করেছেন৷

নমুনা উত্স কোড

GitHub থেকে সংগ্রহস্থল ক্লোন করুন

git clone https://github.com/android/large-screen-codelabs/

...অথবা সংগ্রহস্থলের একটি জিপ ফাইল ডাউনলোড করুন এবং এটি বের করুন