Android Activity Life Cycle

আমরা যে অ্যান্ড্রয়েড অ্যাপ্লিকেশান গুলো ব্যবহার করছি সেগুলো আসলে অনেকগুলো Activity নিয়ে তৈরি। যেমন আমরা Gmail ব্যবহার করি আমাদের E-mail  পড়ার জন্য। এই Gmail অ্যাপ্লিকেশানটি শুরুতেই যে স্ক্রীনটি আসবে তাতে ইউজারের মেইলগুলো দেখা যায়। এই স্ক্রীনটি কিন্ত একটি Activity। এখন কেউ যদি যে কোন একটি ইমেইল এ ক্লিক করে তবে নতুন একটি Activity চালু হয়ে যাবে। এভাবে ইউজার যখন অ্যাপ ব্যবহার করার সময় এক Activity থেকে অন্য Activity তে পরিবর্তন করে অথবা নতুন কোন অ্যাপ্লিকেশান চালু করে বা বর্তমান অ্যাপটি বন্ধ করে দেয়, অ্যাপের Activity Instance এর অবস্থার পরিবর্তন হয়। আর এই  অবস্থার পরিবর্তনের উপর অ্যান্ড্রয়েড বিভিন্ন Method কল করে থাকে।

এই Method গুলোর মাধ্যমে একজন ডেভেলপার তার অ্যাপটি কেমন হবে তা ঠিক করে দিতে পারে। যেমন আপনি হয়ত চান অ্যাপ চালু হবার সাথে সাথে ইন্টারনেট অন হবে হবে আবার অ্যাপ বন্ধ হলে ইন্টারনেটও বন্ধ হয়ে যাবে। আর এই সব কিছুই আপনি অ্যাপকে আপনার মত তৈরি করতে পারবেন।


Lifecycle Methods

অ্যান্ড্রয়েডের বিভিন্ন lifecycle stage এর জন্য ছয়টি method আছে। এগুলো হলঃ

  • OnCreate
  • OnStart
  • OnResume
  • OnPause
  • OnStop
  • OnDestroy
নিচের ছবিটি থেকে অ্যান্ড্রয়েড Lifecycle সম্পর্কে ভাল ধারনা পাওয়া যাবে। ছবিটির idea আমি পেয়েছি Udacity এর একটি টিউটোরিয়াল থেকে। টিউটোরিয়ালটি দেখতে পারেন এই লিঙ্ক থেকে। লিস্ট থেকে Lifecycle এর টিউটোরিয়ালটি দেখতে পারেন, ওরা খুব সুন্দর করে একটি অ্যাপ দিয়ে বুঝিয়েছে।



ইউজার যখন back button চেপে Activity থেকে বের হয়ে যায় (App close), Activity কিন্ত পুরোপুরি close হয় না। বরং এটি মেমোরিতে জমা হয়ে থাকে, যেন পরবর্তীতে ইউজার যদি আবারও অ্যাপটি ওপেন করে তখন যেন ইউজার যে অবস্থাতে অ্যাপ বন্ধ করে ছিল, সেই অবস্থা থেকে আবার Activity চালু হয়।


OnCreate()

অ্যান্ড্রয়েড যখন প্রথমবারের  Activity তৈরি করে, এই method টি তখন কল হয়। তাই এই Method এ এমন কিছু Logic কার্যকর করবে যা কেবলমাত্র অ্যাপ্লিকেশানের Lifecycle এ একবার ঘটবে। যেমনঃ কোন xml layout কে User Interface হিসেবে ডিক্লেয়ার করা।
setContentView(R.layout.activity_search);
অথবা লিস্টে ডাটা পাঠানো, কিংবা Background thread আরম্ভ করা।

OnStart()

যখন Activity, Started state এ প্রবেশ করে সিস্টেম Onstart method  কল করে থাকে। অ্যাপটি ইউজারের কাছে visible হয়। অর্থাৎ ইউজার অ্যাপটি স্ক্রীনে দেখতে পারে এবং অ্যাপটি Foreground অ্যাপ হিসেবে স্থায়ী হয়। যদিও Foreground অ্যাপ হিসেবে Activity স্থায়ী হওয়ার সাথে সাথে পরবর্তী Activity State OnResume() কল হওয়া। কিন্তু অ্যাপ visible এবং Foreground app হিসেবে স্থায়ী হওয়া এত দ্রুত ঘটে যে ইউজার তার পার্থক্য ধরতে পারে না। তাই OnStart কলের সাথে OnResume ও  কল হয়ে যায়।

OnResume()

এই State এ অ্যাপ সক্রিয় Foreground অ্যাপ হিসেবে সিস্টেমে রান করে থাকে। সহজ বাংলায় যে অ্যাপটি ইউজার এখন ব্যবহার করছে সেটাই active Foreground অ্যাপ। এই state এ অ্যাপ ইউজারের সাথে ডাটা আদান-প্রদান করে থাকে। যদি ইউজার নতুন কোন অ্যাপ ওপেন করে, অথবা যে Activity তে আছে তা থেকে অন্য Activity তে চলে যায়, তাহলে অ্যাপ Resumed state  থেকে Paused stated  এ চলে যায় এবং OnPaused মেথড কল হয়। কারন নতুন Activity বা অ্যাপ ওপেন করলে বর্তমান অ্যাপটি তার ফোকাস হারায়।
উদারনস্বরূপ, ধরুন আপনি Gmail অ্যাপটি ব্যবহার করছেন, যেহেতু এটি Active Foreground অ্যাপ তাই এখন OnResume() মেথড কল হবে। কিন্তু হটাত আপনার ফোন কল আসলো অ্যান্ড্রয়েড তখন Caller Screen দেখাবে এবং Gmail অ্যাপটি Paused state এ চলে যাবে। কিন্তু অ্যান্ড্রয়েড তখনও Gmail এর Activity কে destroy করবে না বরং মেমোরির Backstack এ জমা করে রাখবে যাতে পরবর্তীতে অ্যাপটি যে অবস্থায় বন্ধ হয়ে ছিল, সেই অবস্থায় চালু করতে পারে।

OnPause()

OnPause কে একধরনের সতর্কবার্তা হিসেবে বলা যায় । আর সতর্কবার্তাটি হল  ইউজার Activity থেকে বের হয়ে গেছে। Paused state এ এমন কিছু টাস্ক সম্পন্ন করা উচিত যেগুলো Activity paused হবার পরও চলতে থাকবে যেমন- Music Player. ইউজার হয়ত এখন music player এ গান শুনছে কিন্তু কোন কারনে music player Activity paused হয়ে গেল, তাই বলে গান যদি বন্ধ হয়ে যায় তবে ইউজারের Player এর উপর খারাপ অনুভূতি আসতে পারে। Activity Paused state এ যাবার বেশ কিছু কারন আছে। যেমনঃ
  1. নতুন / semi-transparent(যেমন Dialog) activity চালু হয়ে যাবার কারনে। Activity যতক্ষণ পর্যন্ত focused না হবে এটি paused হিসেবে অবস্থান করে।
  2. অ্যান্ড্রয়েড ৭.০ (Api level 24) অথবা higher এ অ্যাপ multi-window  তে রান করতে পারে। কোন একটা window তে অ্যাপ focus হারালে, সিস্টেম সেই অ্যাপ সব window তে Pause করে দেয়।
OnStop()

যখন Activity আর ইউজারের কাছে visible না থাকে, তখন এটি সম্পূর্ণ Stopped state এ প্রবেশ করেছে। এটি হতে পারে আপনার নতুন চালু করা Activity টি সম্পূর্ণ Screen দখল করে নিয়েছে।
OnStop() method এ আপনার অ্যাপ যেসব resource ব্যবহার করছে, সেগুলোকে ছেড়ে দিতে পারেন।
যেমনঃ আপনি হয়ত OnStart() method এ কোন BroadcastReceiver চালু করেছিলেন, আর সেটাকে ছেড়ে দেবার সবচেয়ে ভাল স্থান হল এই OnStop(). এতে করে Memory Leak হবার ভয় থাকে না।

Activity Stopped State এ প্রবেশের সাথে সাথে সিস্টেম Activity object কে মেমোরিতে জমা করে রাখে। এ সময় সব state এবং member information জমা থাকে, কিন্তু Window Manager এর সাথে সংযুক্ত থাকে। Activity যখন আবার resume হয়, Activity এই ইনফর্মেশনগুলো recall করে।

OnDestroy()

Activity সম্পূর্ণ destroy  হবার পূর্বে এই মেথডটি কল হয়। সিস্টেম OnDestroy() কল করে থেকে দুটি কারনেঃ

  1. হয় কেউ finish() মেথড কল করেছে অথবা
  2. সিস্টেম মেমোরি খরচ বাঁচানোর জন্য process  টি destroy করে দিয়েছে।

References: 
“Never stop dreaming,
never stop believing,
never give up,
never stop trying, and
never stop learning.”
― Roy T. Bennett, The Light in the Heart

Comments

Popular posts from this blog

অ্যান্ড্রয়েড নিয়ে কিছু কথা