কনফিগারেশন পরিবর্তন হ্যান্ডেল

অ্যাপটি চলাকালীন কিছু ডিভাইস কনফিগারেশন পরিবর্তন হতে পারে। এর মধ্যে রয়েছে, কিন্তু সীমাবদ্ধ নয়:

  • অ্যাপ প্রদর্শনের আকার
  • স্ক্রীন অভিযোজন
  • হরফের আকার এবং ওজন
  • লোকেল
  • ডার্ক মোড বনাম লাইট মোড
  • কীবোর্ড প্রাপ্যতা

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

এই পরামিতিগুলির জন্য সাধারণত আপনার অ্যাপ্লিকেশনের UI তে যথেষ্ট বড় পরিবর্তনের প্রয়োজন হয় যেগুলি পরিবর্তন করার সময় Android প্ল্যাটফর্মের একটি উদ্দেশ্য-নির্মিত প্রক্রিয়া থাকে৷ এই প্রক্রিয়া হল Activity বিনোদন .

কার্যকলাপ বিনোদন

একটি কনফিগারেশন পরিবর্তন ঘটলে সিস্টেম একটি Activity পুনরায় তৈরি করে। এটি করার জন্য, সিস্টেমটি onDestroy() কল করে এবং বিদ্যমান Activity ইনস্ট্যান্সকে ধ্বংস করে। এটি তারপর onCreate() ব্যবহার করে একটি নতুন দৃষ্টান্ত তৈরি করে এবং এই নতুন Activity দৃষ্টান্তটি নতুন, আপডেট করা কনফিগারেশনের সাথে শুরু করা হয়। এর মানে হল যে সিস্টেমটি নতুন কনফিগারেশনের সাথে UI পুনরায় তৈরি করে।

বিনোদনমূলক আচরণ নতুন ডিভাইস কনফিগারেশনের সাথে মেলে এমন বিকল্প সংস্থানগুলির সাথে আপনার অ্যাপ্লিকেশনটিকে স্বয়ংক্রিয়ভাবে পুনরায় লোড করে নতুন কনফিগারেশনের সাথে খাপ খাইয়ে নিতে সাহায্য করে৷

বিনোদন উদাহরণ

একটি TextView বিবেচনা করুন যা android:text="@string/title" ব্যবহার করে একটি স্ট্যাটিক শিরোনাম প্রদর্শন করে, যেমন একটি লেআউট XML ফাইলে সংজ্ঞায়িত করা হয়েছে। যখন ভিউ তৈরি করা হয়, এটি বর্তমান ভাষার উপর ভিত্তি করে ঠিক একবার পাঠ্য সেট করে। ভাষা পরিবর্তন হলে, সিস্টেম কার্যকলাপ পুনরায় তৈরি করে। ফলস্বরূপ, সিস্টেমটি ভিউটিকে পুনরায় তৈরি করে এবং নতুন ভাষার উপর ভিত্তি করে সঠিক মানের সাথে শুরু করে।

বিনোদনটি Activity ক্ষেত্র হিসাবে বা এর যে কোনও অংশে থাকা Fragment , View , বা অন্যান্য অবজেক্টে রাখা কোনও অবস্থাকেও পরিষ্কার করে। কারণ Activity রিক্রিয়েশন Activity এবং UI-এর সম্পূর্ণ নতুন উদাহরণ তৈরি করে। তদ্ব্যতীত, পুরানো Activity আর দৃশ্যমান বা বৈধ নয়, তাই এটির বা এতে থাকা বস্তুর অবশিষ্ট উল্লেখগুলি বাসি। তারা বাগ, মেমরি লিক, এবং ক্র্যাশ হতে পারে.

ব্যবহারকারীর প্রত্যাশা

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

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

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

Activity বিনোদনের মাধ্যমে প্রাসঙ্গিক অবস্থা রক্ষা করার জন্য আপনি তিনটি প্রাথমিক পন্থা অবলম্বন করতে পারেন। কোনটি ব্যবহার করবেন তা নির্ভর করে আপনি যে ধরনের রাজ্য সংরক্ষণ করতে চান তার উপর:

  • জটিল বা বৃহৎ ডেটার জন্য প্রক্রিয়া মৃত্যু পরিচালনা করার জন্য স্থানীয় অধ্যবসায় । স্থায়ী স্থানীয় সঞ্চয়স্থানে ডেটাবেস বা DataStore অন্তর্ভুক্ত থাকে।
  • ব্যবহারকারী অ্যাপটি সক্রিয়ভাবে ব্যবহার করার সময় মেমরিতে UI-সম্পর্কিত অবস্থা পরিচালনা করার জন্য ViewModel ইনস্ট্যান্সের মতো অবজেক্টগুলি ধরে রাখা
  • সিস্টেম-ইনিশিয়েটেড প্রসেস ডেথ পরিচালনা করতে এবং ব্যবহারকারীর ইনপুট বা নেভিগেশনের উপর নির্ভর করে এমন ক্ষণস্থায়ী অবস্থা রাখতে সংরক্ষিত ইনস্ট্যান্স স্টেট

এগুলির প্রত্যেকটির জন্য API সম্পর্কে বিস্তারিতভাবে পড়তে এবং প্রতিটি ব্যবহার উপযুক্ত হলে, UI অবস্থাগুলি সংরক্ষণ করুন দেখুন।

কার্যকলাপ বিনোদন সীমাবদ্ধ

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

নির্দিষ্ট কনফিগারেশন পরিবর্তনের জন্য কার্যকলাপ বিনোদন অক্ষম করতে, আপনার AndroidManifest.xml ফাইলের <activity> এন্ট্রিতে android:configChanges এ কনফিগারেশনের ধরন যোগ করুন। android:configChanges অ্যাট্রিবিউটের ডকুমেন্টেশনে সম্ভাব্য মানগুলি উপস্থিত হয়।

নিচের ম্যানিফেস্ট কোডটি MyActivity এর জন্য Activity রিক্রিয়েশনকে অক্ষম করে যখন স্ক্রিন ওরিয়েন্টেশন এবং কীবোর্ডের প্রাপ্যতা পরিবর্তন হয়:

<activity
    android:name=".MyActivity"
    android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
    android:label="@string/app_name">

কিছু কনফিগারেশন পরিবর্তন সবসময় কার্যকলাপ পুনরায় আরম্ভ করতে কারণ. আপনি তাদের নিষ্ক্রিয় করতে পারবেন না. উদাহরণস্বরূপ, আপনি Android 12L (API স্তর 32) এ প্রবর্তিত গতিশীল রঙের পরিবর্তন অক্ষম করতে পারবেন না।

ভিউ সিস্টেমে কনফিগারেশন পরিবর্তনের প্রতিক্রিয়া

View সিস্টেমে, যখন একটি কনফিগারেশন পরিবর্তন ঘটে যার জন্য আপনি Activity বিনোদন অক্ষম করেছেন, কার্যকলাপটি Activity.onConfigurationChanged() এ একটি কল পায়। যেকোনো সংযুক্ত ভিউ View.onConfigurationChanged() -এ একটি কল পায়। কনফিগারেশন পরিবর্তনের জন্য আপনি android:configChanges এ যোগ করেননি, সিস্টেম স্বাভাবিকের মতো কার্যকলাপ পুনরায় তৈরি করে।

onConfigurationChanged() কলব্যাক পদ্ধতি একটি Configuration অবজেক্ট পায় যা নতুন ডিভাইস কনফিগারেশন নির্দিষ্ট করে। আপনার নতুন কনফিগারেশন কি তা নির্ধারণ করতে Configuration অবজেক্টের ক্ষেত্রগুলি পড়ুন। পরবর্তী পরিবর্তনগুলি করতে, আপনার ইন্টারফেসে আপনি যে সংস্থানগুলি ব্যবহার করেন তা আপডেট করুন৷ যখন সিস্টেম এই পদ্ধতিটি কল করে, তখন আপনার কার্যকলাপের Resources বস্তুটি নতুন কনফিগারেশনের উপর ভিত্তি করে সংস্থানগুলি ফেরত দিতে আপডেট করা হয়। এটি আপনাকে সিস্টেমটি আপনার কার্যকলাপ পুনরায় চালু না করেই আপনার UI এর উপাদানগুলিকে পুনরায় সেট করতে দেয়৷

উদাহরণস্বরূপ, নিম্নলিখিত onConfigurationChanged() বাস্তবায়ন একটি কীবোর্ড উপলব্ধ কিনা তা পরীক্ষা করে:

কোটলিন

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)

    // Checks whether a keyboard is available
    if (newConfig.keyboardHidden === Configuration.KEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "Keyboard available", Toast.LENGTH_SHORT).show()
    } else if (newConfig.keyboardHidden === Configuration.KEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "No keyboard", Toast.LENGTH_SHORT).show()
    }
}

জাভা

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks whether a keyboard is available
    if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "Keyboard available", Toast.LENGTH_SHORT).show();
    } else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO){
        Toast.makeText(this, "No keyboard", Toast.LENGTH_SHORT).show();
    }
}

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

রাষ্ট্র বজায় রাখুন

আপনি যখন এই কৌশলটি ব্যবহার করেন, তখনও আপনাকে স্বাভাবিক ক্রিয়াকলাপের জীবনচক্র চলাকালীন অবস্থা বজায় রাখতে হবে। এটি নিম্নলিখিত কারণে:

  • অনিবার্য পরিবর্তন: কনফিগারেশন পরিবর্তন যা আপনি প্রতিরোধ করতে পারবেন না আপনার অ্যাপ্লিকেশন পুনরায় চালু করতে পারে।
  • মৃত্যু প্রক্রিয়া: আপনার আবেদন অবশ্যই সিস্টেম-সূচিত প্রক্রিয়া মৃত্যু পরিচালনা করতে সক্ষম হবে। ব্যবহারকারী আপনার অ্যাপ্লিকেশনটি ছেড়ে দিলে এবং অ্যাপটি ব্যাকগ্রাউন্ডে চলে গেলে, সিস্টেমটি অ্যাপটিকে ধ্বংস করতে পারে।

জেটপ্যাক কম্পোজে কনফিগারেশন পরিবর্তনের প্রতিক্রিয়া

জেটপ্যাক কম্পোজ আপনার অ্যাপকে কনফিগারেশন পরিবর্তনে আরও সহজে প্রতিক্রিয়া জানাতে দেয়। যাইহোক, আপনি যদি সমস্ত কনফিগারেশন পরিবর্তনের জন্য Activity বিনোদন অক্ষম করেন যেখানে এটি করা সম্ভব, আপনার অ্যাপটিকে এখনও কনফিগারেশন পরিবর্তনগুলি সঠিকভাবে পরিচালনা করতে হবে।

Configuration অবজেক্ট স্থানীয় LocalConfiguration কম্পোজিশনের সাথে কম্পোজ UI অনুক্রমে উপলব্ধ। যখনই এটি পরিবর্তিত হয়, LocalConfiguration.current recompose থেকে কম্পোজযোগ্য ফাংশন রিডিং। কম্পোজিশন লোকাল কিভাবে কাজ করে সে সম্পর্কে তথ্যের জন্য, CompositionLocal এর সাথে স্থানীয়ভাবে স্কোপড ডেটা দেখুন।

উদাহরণ

নিম্নলিখিত উদাহরণে, একটি সংমিশ্রণযোগ্য একটি নির্দিষ্ট বিন্যাস সহ একটি তারিখ প্রদর্শন করে। LocalConfiguration.current এর সাথে ConfigurationCompat.getLocales() কল করে কম্পোজেবল সিস্টেম লোকেল কনফিগারেশন পরিবর্তনের প্রতিক্রিয়া জানায়।

@Composable
fun DateText(year: Int, dayOfYear: Int) {
    val dateTimeFormatter = DateTimeFormatter.ofPattern(
        "MMM dd",
        ConfigurationCompat.getLocales(LocalConfiguration.current)[0]
    )
    Text(
        dateTimeFormatter.format(LocalDate.ofYearDay(year, dayOfYear))
    )
}

লোকেল পরিবর্তিত হলে Activity রিক্রিয়েশন এড়াতে, কম্পোজ কোড হোস্ট করা Activity লোকেল কনফিগারেশন পরিবর্তন থেকে অপ্ট আউট করতে হবে। এটি করার জন্য, আপনি android:configChanges to locale|layoutDirection সেট করুন।

কনফিগারেশন পরিবর্তন: মূল ধারণা এবং সর্বোত্তম অনুশীলন

কনফিগারেশন পরিবর্তনগুলিতে কাজ করার সময় এইগুলি আপনার জানা দরকার মূল ধারণাগুলি:

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

একটি ভাল ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে, নিম্নলিখিত সেরা অনুশীলনগুলি পর্যবেক্ষণ করুন:

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

আকার-ভিত্তিক কনফিগার পরিবর্তনগুলি পরিচালনা করুন

আকার-ভিত্তিক কনফিগারেশন পরিবর্তন যে কোনো সময় ঘটতে পারে এবং যখন আপনার অ্যাপটি একটি বড় স্ক্রীন ডিভাইসে চলে যেখানে ব্যবহারকারীরা মাল্টি-উইন্ডো মোডে প্রবেশ করতে পারে তখন এটির সম্ভাবনা বেশি। তারা আশা করে যে আপনার অ্যাপটি সেই পরিবেশে ভাল কাজ করবে।

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

আকার-ভিত্তিক কনফিগার পরিবর্তনের জন্য কার্যকলাপ বিনোদন সীমাবদ্ধ করুন

আপনি যখন আকার-ভিত্তিক কনফিগারেশন পরিবর্তনের জন্য Activity বিনোদন অক্ষম করেন, তখন সিস্টেম Activity পুনরায় তৈরি করে না। পরিবর্তে, এটি Activity.onConfigurationChanged() এ একটি কল পায়। যেকোনো সংযুক্ত ভিউ View.onConfigurationChanged() এ একটি কল পায়।

আপনার ম্যানিফেস্ট ফাইলে android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout " থাকলে আকার-ভিত্তিক কনফিগারেশন পরিবর্তনের জন্য Activity বিনোদন অক্ষম করা হয়৷

আকার-ভিত্তিক কনফিগার পরিবর্তনের জন্য কার্যকলাপ বিনোদনের অনুমতি দিন

Android 7.0 (API লেভেল 24) এবং উচ্চতর, Activity বিনোদন শুধুমাত্র আকার-ভিত্তিক কনফিগারেশন পরিবর্তনের জন্য ঘটে যদি আকার পরিবর্তন উল্লেখযোগ্য হয়। যখন সিস্টেমটি অপর্যাপ্ত আকারের কারণে একটি Activity পুনরায় তৈরি করে না, তখন সিস্টেমটি এর পরিবর্তে Activity.onConfigurationChanged() এবং View.onConfigurationChanged() কল করতে পারে।

Activity সম্পর্কে পর্যবেক্ষণ করার জন্য কিছু সতর্কতা রয়েছে এবং যখন Activity পুনরায় তৈরি করা হয় না তখন কলব্যাকগুলি View :

  • Android 11 (API লেভেল 30) এর মাধ্যমে Android 13 (API লেভেল 33) এ Activity.onConfigurationChanged() বলা হয় না।
  • একটি পরিচিত সমস্যা রয়েছে যেখানে কিছু ক্ষেত্রে Android 12L (API স্তর 32) এবং Android 13 (API স্তর 33) এর প্রাথমিক সংস্করণগুলিতে View.onConfigurationChanged() কল করা যাবে না। আরও তথ্যের জন্য, এই সর্বজনীন সমস্যাটি দেখুন। এটি পরবর্তীকালে অ্যান্ড্রয়েড 13 রিলিজ এবং অ্যান্ড্রয়েড 14 এ সম্বোধন করা হয়েছে।

সাইজ-ভিত্তিক কনফিগারেশন পরিবর্তনের জন্য শোনার উপর নির্ভরশীল কোডের জন্য, আমরা Activity রিক্রিয়েশন বা Activity.onConfigurationChanged() View.onConfigurationChanged() () সহ একটি ইউটিলিটি View ব্যবহার করার পরামর্শ দিই।