মোবাইল অ্যাপের জীবনচক্র নির্ধারণ করে যে অ্যাপটি চালু, ছোট, ব্যাকগ্রাউন্ড থেকে ফিরে আসা এবং বন্ধ করার সময় কীভাবে আচরণ করে। এই নিবন্ধে আমরা App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle এবং LifecycleOwner নিয়ে আলোচনা করব। মেমোরি লিক, ডেটা হারানো এবং অ্যাপের ভুল আচরণ প্রতিরোধের জন্য এই প্রক্রিয়াগুলি বোঝা অত্যন্ত গুরুত্বপূর্ণ। আরও বিস্তারিত জানতে Android Activity Lifecycle-এর অফিসিয়াল ডকুমেন্টেশন দেখুন।
মূল পয়েন্ট
পৃথক স্ক্রিনের জীবনচক্রে যাওয়ার আগে, সম্পূর্ণ অ্যাপের জীবনচক্র বোঝা গুরুত্বপূর্ণ। iOS-এ, অ্যাপটি পাঁচটি অবস্থার মধ্য দিয়ে যায়: Not Running (চালু নয়), Inactive (ব্যাকগ্রাউন্ডে, ইভেন্ট গ্রহণ করে না), Active (সক্রিয়), Background (ব্যাকগ্রাউন্ডে, কোড এক্সিকিউট হচ্ছে) এবং Suspended (ব্যাকগ্রাউন্ডে, কোড স্থগিত)। এই অবস্থাগুলি AppDelegate-এ applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground এবং applicationWillTerminate মেথডের মাধ্যমে পরিচালিত হয়।
Android-এ, এর সমতুল্য হল Application Lifecycle, যা Application.ActivityLifecycleCallbacks ইন্টারফেসের মাধ্যমে ট্র্যাক করা হয়। তবে, Android Activity — একটি পৃথক অ্যাপ স্ক্রিন —-এর জীবনচক্রের উপর বেশি মনোযোগ দেয়। কারণ একটি Android অ্যাপে একাধিক Activities থাকতে পারে, প্রতিটির নিজস্ব চক্র থাকে।
Android-এ আধুনিক পদ্ধতি হল lifecycle-process লাইব্রেরি থেকে ProcessLifecycleOwner ব্যবহার করা। এটি কোনো নির্দিষ্ট Activity-তে আবদ্ধ না হয়ে সম্পূর্ণ প্রক্রিয়ার অবস্থা ট্র্যাক করার অনুমতি দেয়। iOS-এ, অ্যাপ অবস্থা ট্র্যাক করতে UISceneDelegate (iOS 13 থেকে) বা AppDelegate ব্যবহার করা হয়। SceneDelegate iPad-এ একাধিক উইন্ডো (multiwindow) পরিচালনা করে। App Lifecycle বোঝা IT Sectr-এর জন্য ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশন, স্ট্রিমিং এবং VoIP কল সহ অ্যাপ ডেভেলপ করার সময় বিশেষভাবে গুরুত্বপূর্ণ।
Activity হল Android অ্যাপের মৌলিক উপাদান, যা একটি স্ক্রিন উপস্থাপন করে। Activity-র একটি স্পষ্টভাবে সংজ্ঞায়িত জীবনচক্র আছে যা ব্যবহারকারীর ক্রিয়া এবং সিস্টেম ইভেন্টের (স্ক্রিন রোটেশন, ইনকামিং কল, কম মেমোরি) প্রতিক্রিয়ায় অপারেটিং সিস্টেম দ্বারা পরিচালিত হয়।
| মেথড | বিবরণ | কী করবেন |
|---|---|---|
| onCreate | Activity তৈরি হলে একবার কল হয় | UI আরম্ভ, findViewById, ViewModel সেটআপ |
| onStart | Activity দৃশ্যমান হয় | অ্যানিমেশন শুরু, BroadCastReceiver নিবন্ধন |
| onResume | Activity ইনপুট ফোকাস পায় | ক্যামেরা, সেন্সর, অ্যানিমেশন শুরু |
| onPause | Activity ফোকাস হারায় (আংশিকভাবে দৃশ্যমান) | ড্রাফ্ট সংরক্ষণ, অ্যানিমেশন বন্ধ |
| onStop | Activity দৃশ্যমান নয় | রিসোর্স মুক্ত করা, আপডেট বন্ধ |
| onDestroy | Activity ধ্বংস হয় | সব রেফারেন্স পরিষ্কার, LiveData থেকে আনসাবস্ক্রাইব |
| onRestart | onStop-এর পরে onStart-এর আগে কল হয় | পুনরায় আরম্ভ |
গুরুত্বপূর্ণ: অস্থায়ী অবস্থা সংরক্ষণের জন্য onSaveInstanceState onStop-এর আগে কল হয়। পুনরুদ্ধার onCreate-এ Bundle savedInstanceState-এর মাধ্যমে বা ViewModel-এ SavedStateHandle-এর মাধ্যমে ঘটে। জীবনচক্রের সঠিক পরিচালনা ছাড়া, স্ক্রিন ঘোরালে অ্যাপ সব অসংরক্ষিত ডেটা হারাবে।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("draft", draftText)
}
override fun onDestroy() {
super.onDestroy()
// Отписка от всех подписок
}
}
Jetpack Compose-এ, Activity-র জীবনচক্র অপরিবর্তিত থাকে, কিন্তু Compose অতিরিক্ত টুল সরবরাহ করে: LifecycleOwner-এর মাধ্যমে Lifecycle-aware composition, ধ্বংসের সময় স্বয়ংক্রিয় রিসোর্স পরিষ্কারের জন্য LifecycleEventEffect এবং DisposableEffect ইফেক্ট।
Android-এ Fragment Activity-র ভিতরে থাকে এবং এর নিজস্ব জীবনচক্র আছে, যা আংশিকভাবে Activity-র সাথে ওভারল্যাপ করে কিন্তু নতুন মেথড যোগ করে। Activity ধ্বংস না করেই Fragments যোগ, প্রতিস্থাপন এবং সরানো যায়, যা এগুলিকে আরও নমনীয় কিন্তু আরও জটিল করে তোলে।
Fragment Lifecycle-এর মূল মেথড: onAttach — Fragment Activity-র সাথে সংযুক্ত (প্রথম কল); onCreate — ডেটা আরম্ভ; onCreateView — View তৈরি; onViewCreated — View তৈরি হয়েছে, UI কনফিগার করা যায়; onStart — Fragment দৃশ্যমান; onResume — Fragment ফোকাসে; onPause — Fragment ফোকাস হারায়; onStop — Fragment দৃশ্যমান নয়; onDestroyView — View ধ্বংস হয়; onDestroy — Fragment ধ্বংস হয়; onDetach — Fragment Activity থেকে বিচ্ছিন্ন হয়।
Activity থেকে মূল পার্থক্য: onCreateView এবং onDestroyView একাধিকবার কল হতে পারে (যেমন, TabLayout স্যুইচ করার সময়), যেখানে onCreate একবার কল হয়। তাই, View-র আরম্ভ onViewCreated-এ করা উচিত, onCreateView-এ নয়। View-এর সাথে সম্পর্কিত রিসোর্স (যেমন RecyclerView অ্যাডাপ্টার) onDestroyView-এ পরিষ্কার করা উচিত।
UIViewController iOS-এ স্ক্রিন পরিচালনার জন্য বেস ক্লাস। এর জীবনচক্র মেথডের একটি ক্রম নিয়ে গঠিত যা UIKit স্বয়ংক্রিয়ভাবে কল করে। এই চক্র বোঝা সঠিক UI আরম্ভ, ডেটা ব্যবস্থাপনা এবং মেমোরি হ্যান্ডলিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ।
| মেথড | কখন কল হয় | সাধারণ ব্যবহার |
|---|---|---|
| loadView | যখন View Controller তার View হায়ারার্কি লোড করে | স্টোরিবোর্ড ছাড়া কাস্টম আরম্ভ |
| viewDidLoad | View মেমোরিতে লোড হওয়ার পর (একবার) | UI সেটআপ, প্রাথমিক ডেটা লোড |
| viewWillAppear | স্ক্রিনে View দেখানোর আগে | ডেটা আপডেট, নোটিফিকেশনে সাবস্ক্রাইব |
| viewDidAppear | স্ক্রিনে View দেখানোর পরে | অ্যানিমেশন শুরু, ট্র্যাকিং অ্যানিমেশন শুরু |
| viewWillDisappear | স্ক্রিন থেকে View অদৃশ্য হওয়ার আগে | অবস্থা সংরক্ষণ, নোটিফিকেশন থেকে আনসাবস্ক্রাইব |
| viewDidDisappear | স্ক্রিন থেকে View অদৃশ্য হওয়ার পরে | অ্যানিমেশন বন্ধ, রিসোর্স মুক্ত |
| dealloc | যখন View Controller ধ্বংস হয় | সব রিসোর্স মুক্ত |
গুরুত্বপূর্ণ: viewDidLoad View Controller-র জীবনে শুধু একবার কল হয়। প্রতি বার প্রদর্শনে ডেটা আপডেট করতে viewWillAppear ব্যবহার করুন। যদি আপনি viewWillAppear-এ NotificationCenter-এ সাবস্ক্রাইব করেন, তাহলে মেমোরি লিক এড়াতে viewDidDisappear-এ আনসাবস্ক্রাইব করতে ভুলবেন না।
SwiftUI View স্ট্রাকচারের মাধ্যমে Views-এর জীবনচক্র পরিচালনা করে। কলব্যাক মেথডের পরিবর্তে, SwiftUI onAppear এবং onDisappear মডিফায়ার ব্যবহার করে। গ্লোবাল অ্যাপ অবস্থার জন্য, App এবং Scene প্রোটোকলের মাধ্যমে App Lifecycle ব্যবহার করা হয়। SwiftUI অবস্থার উপর ভিত্তি করে Views-এর তৈরি এবং ধ্বংস স্বয়ংক্রিয়ভাবে পরিচালনা করে, যা ডেভেলপমেন্ট সহজ করে কিন্তু View-র আইডেন্টিটি এবং লাইফটাইম বোঝার প্রয়োজন।
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("View появилась")
}
.onDisappear {
print("View исчезла")
}
}
}
LifecycleOwner হল Android Architecture Components-এর একটি ইন্টারফেস যা একটি অবজেক্টকে চিহ্নিত করে যার একটি জীবনচক্র আছে (Activity, Fragment)। LifecycleObserver হল একটি ইন্টারফেস যা একটি অবজেক্টকে LifecycleOwner-এর ইভেন্টে সাবস্ক্রাইব করার অনুমতি দেয়। একসাথে তারা আধুনিক Android ডেভেলপমেন্টে রিঅ্যাকটিভ জীবনচক্র ব্যবস্থাপনার ভিত্তি তৈরি করে।
onStart/onStop-এ স্পষ্টভাবে মেথড কল করার পরিবর্তে, DefaultLifecycleObserver (পুরনো LifecycleObserver এবং @OnLifecycleEvent অ্যানোটেশনের প্রতিস্থাপন) ব্যবহার করার পরামর্শ দেওয়া হয়। এটি Google-এর দ্বারা ViewModel এবং অন্যান্য কম্পোনেন্টের জন্য প্রচারিত পদ্ধতি যাদের Activity বা Fragment-এর সরাসরি রেফারেন্স ছাড়াই জীবনচক্রে প্রতিক্রিয়া জানাতে হয়।
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
// Подписка на обновления
}
override fun onStop(owner: LifecycleOwner) {
// Отписка
}
}
IT Sectr-এ, আমরা সব Android প্রকল্পে LifecycleOwner ব্যবহার করি। ViewModel viewModelScope এবং lifecycleScope-এর মাধ্যমে Activity-র LifecycleOwner-এ সাবস্ক্রাইব করে, যা Activity ধ্বংস হলে স্বয়ংক্রিয়ভাবে করুটিন বাতিলের গ্যারান্টি দেয়। এটি মেমোরি লিক প্রতিরোধ করে এবং কোডকে পরিষ্কার ও নিরাপদ করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Activity ছয়টি অবস্থার মধ্য দিয়ে যায়: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).
ক্রম: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear। viewDidLoad একবার কল হয়।
LifecycleOwner হল Android Architecture Components-এর একটি কম্পোনেন্ট যা Activity বা Fragment-এর জীবনচক্রের মালিক। LifecycleObserver-এর মাধ্যমে ইভেন্টে সাবস্ক্রাইব করার অনুমতি দেয়।
iOS অ্যাপ পাঁচটি অবস্থার মধ্য দিয়ে যায়: Not Running, Inactive, Active, Background, Suspended। UIApplicationDelegate-এর মাধ্যমে ট্রানজিশন পরিচালিত হয়।
Saved State হল স্ক্রিন রোটেশন বা প্রক্রিয়া পুনঃনির্মাণে Activity/Fragment অবস্থা সংরক্ষণের Android প্রক্রিয়া। এটি onSaveInstanceState এবং SavedStateHandle ব্যবহার করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।