কার্যকলাপের অবস্থার পরিবর্তন

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

কার্যকলাপের অবস্থা সম্পর্কে আরও তথ্যের জন্য, কার্যকলাপ জীবনচক্র দেখুন। কিভাবে ViewModel ক্লাস আপনাকে কার্যকলাপের জীবনচক্র পরিচালনা করতে সাহায্য করতে পারে সে সম্পর্কে জানতে, ViewModel ওভারভিউ দেখুন।

কনফিগারেশন পরিবর্তন ঘটে

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

যখন একটি কনফিগারেশন পরিবর্তন ঘটে, কার্যকলাপটি ধ্বংস হয়ে পুনরায় তৈরি করা হয়। এটি মূল কার্যকলাপের উদাহরণে নিম্নলিখিত কলব্যাকগুলিকে ট্রিগার করে:

  1. onPause()
  2. onStop()
  3. onDestroy()

কার্যকলাপের একটি নতুন উদাহরণ তৈরি করা হয়েছে, এবং নিম্নলিখিত কলব্যাকগুলি ট্রিগার করা হয়েছে:

  1. onCreate()
  2. onStart()
  3. onResume()

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

মাল্টি-উইন্ডো কেস পরিচালনা করুন

যখন একটি অ্যাপ মাল্টি-উইন্ডো মোডে প্রবেশ করে, যা Android 7.0 (API স্তর 24) এবং উচ্চতর সংস্করণে উপলব্ধ, সিস্টেমটি একটি কনফিগারেশন পরিবর্তনের চলমান কার্যকলাপকে অবহিত করে, এইভাবে পূর্বে বর্ণিত জীবনচক্র পরিবর্তনের মধ্য দিয়ে যায়।

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

মাল্টি-উইন্ডো লাইফসাইকেল সম্পর্কে আরও তথ্যের জন্য, মাল্টি-উইন্ডো সাপোর্ট পেজে মাল্টি-উইন্ডো লাইফসাইকেলের ব্যাখ্যা দেখুন।

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

যখন ব্যবহারকারী অ্যাপ A থেকে অ্যাপ B তে স্যুইচ করে, সিস্টেমটি অ্যাপ A-তে onPause() এবং অ্যাপ B-তে onResume() কল করে। ব্যবহারকারী যখন অ্যাপগুলির মধ্যে টগল করে তখন এটি এই দুটি পদ্ধতির মধ্যে সুইচ করে।

মাল্টি-উইন্ডো মোড সম্পর্কে আরও বিস্তারিত জানার জন্য, মাল্টি-উইন্ডো সমর্থন পড়ুন।

ক্রিয়াকলাপ বা ডায়ালগ অগ্রভাগে উপস্থিত হয়৷

যদি একটি নতুন ক্রিয়াকলাপ বা ডায়ালগ অগ্রভাগে উপস্থিত হয়, ফোকাস গ্রহণ করে এবং প্রগতিশীল কার্যকলাপকে আংশিকভাবে কভার করে, আচ্ছাদিত কার্যকলাপটি ফোকাস হারায় এবং বিরাম অবস্থায় প্রবেশ করে। তারপর, সিস্টেম এটিতে onPause() কল করে।

যখন আচ্ছাদিত কার্যকলাপটি ফোরগ্রাউন্ডে ফিরে আসে এবং ফোকাস পুনরুদ্ধার করে, সিস্টেমটি কল করে onResume()

যদি একটি নতুন ক্রিয়াকলাপ বা ডায়ালগ ফোরগ্রাউন্ডে উপস্থিত হয়, ফোকাস গ্রহণ করে এবং প্রগতিতে থাকা ক্রিয়াকলাপটিকে সম্পূর্ণভাবে কভার করে, আচ্ছাদিত কার্যকলাপটি ফোকাস হারায় এবং থামানো অবস্থায় প্রবেশ করে। তারপর সিস্টেমটি দ্রুত পর্যায়ক্রমে onPause() এবং onStop() কল করে।

যখন কভার করা কার্যকলাপের একই উদাহরণ অগ্রভাগে ফিরে আসে, তখন সিস্টেম কল করে onRestart() , onStart() , এবং onResume() কার্যকলাপে। যদি এটি আবৃত কার্যকলাপের একটি নতুন উদাহরণ হয় যা ব্যাকগ্রাউন্ডে আসে, তাহলে সিস্টেমটি onRestart() কল করে না, শুধুমাত্র onStart() এবং onResume()

ব্যবহারকারী ট্যাপ বা অঙ্গভঙ্গি ফিরে

যদি কোনো অ্যাক্টিভিটি ফোরগ্রাউন্ডে থাকে এবং ব্যবহারকারী ট্যাপ করে বা পিছনের ইঙ্গিত দেয়, তাহলে কার্যকলাপটি onPause() , onStop() , এবং onDestroy() কলব্যাকের মাধ্যমে রূপান্তরিত হয়। কার্যকলাপ ধ্বংস এবং পিছনে স্ট্যাক থেকে সরানো হয়.

ডিফল্টরূপে, onSaveInstanceState() কলব্যাক এই ক্ষেত্রে চালু হয় না। এই আচরণটি অনুমান করে যে ব্যবহারকারী ক্রিয়াকলাপের একই দৃষ্টান্তে ফিরে আসার কোন প্রত্যাশা ছাড়াই ফিরে যান।

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

আপনি যদি onBackPressed() পদ্ধতিকে ওভাররাইড করেন, আমরা উচ্চতর সুপারিশ করছি যে আপনি এখনও আপনার ওভাররাইড করা পদ্ধতি থেকে super.onBackPressed() চালু করুন৷ অন্যথায় সিস্টেম ব্যাক আচরণ ব্যবহারকারীর কাছে বিরক্তিকর হতে পারে।

সিস্টেম অ্যাপ প্রক্রিয়াকে হত্যা করে

যদি একটি অ্যাপ ব্যাকগ্রাউন্ডে থাকে এবং সিস্টেমটিকে একটি ফোরগ্রাউন্ড অ্যাপের জন্য মেমরি খালি করতে হয়, তাহলে সিস্টেমটি ব্যাকগ্রাউন্ড অ্যাপটিকে মেরে ফেলতে পারে। যখন সিস্টেম একটি অ্যাপকে মেরে ফেলে, তখন কোন গ্যারান্টি নেই যে onDestroy() অ্যাপটিতে কল করা হবে।

সিস্টেম কীভাবে কোন প্রক্রিয়াগুলিকে ধ্বংস করবে সে সম্পর্কে আরও জানতে, মেমরি এবং প্রক্রিয়াগুলি এবং অ্যাপ লাইফসাইকেল থেকে অ্যাক্টিভিটি স্টেট এবং ইজেকশন পড়ুন।

সিস্টেম যখন আপনার অ্যাপ প্রক্রিয়াটিকে মেরে ফেলে তখন কীভাবে আপনার কার্যকলাপের UI অবস্থা সংরক্ষণ করবেন তা শিখতে, ক্ষণস্থায়ী UI অবস্থা সংরক্ষণ এবং পুনরুদ্ধার দেখুন।