বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

একটিভিটি পূনরায় তৈরী করা

(http://developer.android.com/training/basics/activity-lifecycle/recreating.html)

এমন অনেক অবস্থা আছে যেখানে আপনার একটিভিটি স্বাভাবিক অ্যাপ কর্মকান্ডের কারনে ধ্বংস হয়, যেমন ইউজার যখন Back button চাপে অথবা আপনার একটিভিটি finish()কে কল করে এটা নিজেকেই ধ্বংস করে। সিস্টেমটি আপনার একটিভিটিকে ধ্বংস করতে পারে যদি এটা বর্তমানে বন্ধ (স্টপড) থাকে এবং দীর্ঘ সময় এর কোন ব্যবহার করা না হয় বা ফোরগ্রাউন্ড একটিভিটি আরও রিসোর্স দাবী করে যার ফলে সিস্টেম অবশ্যই মেমরি রিকভার করতে ব্যাকগ্রাউন্ড প্রসেসকে শাটডাউন করে দেয়।

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

সতর্কতা: ইউজার স্ক্রিন রোটেট করলে প্রতিবারই আপনার একটিভিটি ধ্বংসএবং নতুন করে তৈরী হবে। যখন স্ক্রিন এর ওরিয়েন্টেশন বদলাবে তখন সিস্টেম ফোরগ্রাউন্ড একটিভিটি ধ্বংস করবে এবং নতুন কওে তৈরী করবে কারন স্ক্রিন কনফিগারেশন পরিবর্তন হয়েছে এবং আপনার একটিভিটির বিকল্প রিসোর্স লোড করার দরকার হতে পারে (যেমন, লেআউটটি)।

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

নোট: অ্যান্ড্রয়েড সিস্টেমের জন্য আপনার একটিভিটির ভিউয়ের অবষস্থা রিস্টোর করতে, android:id এট্রিবিউট কর্তৃক প্রদত্ত প্রতিটা ভিউয়ের অবশ্যই স্বতন্ত্র আইডি থাকা উচিত।

একটিভিটি অবস্থা সম্পর্কে অতিরিক্ত ডাটা সেভ করতে, আপনাকে অবশ্যই onSaveInstanceState()কলব্যাক মেথডকে অগ্রাহ্য করতে হবে। যখন ইউজার আপনার একটিভিটি ত্যাগ করছে তখন সিস্টেম এটাকে কল করে এবং এটাকে Bundle অবজেক্টে পাস করে দেয় যা ইভেন্টে সেভ হয়ে যাবে যাতে আপনার একটিভিটি অনাকাঙ্খিতভাবে ধ্বংস হয়ে যায়। যদি সিস্টেম অবশ্যই পরবর্তীতে একটিভিটি ইনসটেন্স নতুন করে তৈরী করে, এটা একই Bundle অবজেক্ট onRestoreInstanceState()এবং onCreate()উভয় পদ্ধতির দিকে পাস করে দেয়।

ফিগার ২. যেহেতু সিস্টেম আপনার একটিভিটি ষ্টপ করতে শুরু হয়েছে, এটা onSaveInstanceState()কে কল করে (১) যাতে ইনসটেন্স অবশ্যই নতুন করে তৈরী করতে হবে এমন ক্ষেত্রে আপনি অতরিক্ত স্টেট ডাটাকে সুনির্দিষ্ট করতে পারেন যা আপনি সেভ করতে চান। যদি একটিভিটি ধ্বংস হয়ে থাকে এবং একই ইনসটেন্স অবশ্যই নতুন করে তৈরী করতে হবে, সিস্টেম স্টেট ডাটা যা (১) এ নির্ধারন করা হয়েছে তাকে onCreate()পদ্ধতি (২) এবং onRestoreInstanceState()উভয় (৩) পদ্ধতির দিকে পাস করে।