মোবাইল অ্যাপ ডেভেলপমেন্ট কী ও ওয়েব থেকে কীভাবে আলাদা
এই পাঠে যা শিখবেন
- মোবাইল অ্যাপ ডেভেলপমেন্টের সংজ্ঞা এবং এটি ওয়েব ডেভেলপমেন্ট থেকে ঠিক কীভাবে আলাদা
- চারটি মূল পার্থক্য — অ্যাপ লাইফসাইকেল, টাচ ইনপুট, অফলাইন সক্ষমতা, ডিভাইস API
- Full-Stack Web Frameworks কোর্সের সাথে এই কোর্সের সম্পর্ক — কোন ধারণাগুলো পুনরাবৃত্তি হবে না
- Python দিয়ে একটি ছোট্ট, সত্যিকারের অ্যাপ-লাইফসাইকেল স্টেট মেশিন — M1-এর পরের পাঠে আসা পূর্ণাঙ্গ লাইফসাইকেলের একটি প্রিভিউ
১ · মোবাইল অ্যাপ ডেভেলপমেন্ট কী
মোবাইল অ্যাপ ডেভেলপমেন্টMobile App Developmentস্মার্টফোন ও ট্যাবলেটের জন্য সফটওয়্যার ডিজাইন, তৈরি ও ডিপ্লয় করার প্রক্রিয়া — যা অপারেটিং সিস্টেমের (iOS/Android) কড়া লাইফসাইকেল নিয়ম, সীমিত ব্যাটারি/মেমোরি, এবং প্রায়ই অস্থির নেটওয়ার্কের প্রেক্ষাপটে কাজ করে। মানে এমন সফটওয়্যার তৈরি করা যা একটি পকেটে থাকা, ব্যাটারি-চালিত, প্রায়ই অস্থির নেটওয়ার্কে থাকা ডিভাইসে চলে — এবং ব্যবহারকারী যেকোনো মুহূর্তে অ্যাপটি ছেড়ে অন্য অ্যাপে চলে যেতে পারে, বা OS নিজেই মেমোরি বাঁচাতে অ্যাপটি বন্ধ করে দিতে পারে। এই বাস্তবতা মোবাইল অ্যাপকে একটি ওয়েব পেজ থেকে মৌলিকভাবে আলাদা করে তোলে।
২ · চারটি মূল পার্থক্য
একটি ওয়েব পেজ শুধু লোড হয় আর আনলোড হয়; একটি মোবাইল অ্যাপ ফোরগ্রাউন্ড-ব্যাকগ্রাউন্ড-কিল — এই তিন স্টেটের মধ্যে বারবার ট্রানজিশন করে, প্রায়ই ব্যবহারকারীর হাতে সরাসরি নিয়ন্ত্রণ ছাড়াই।
মাউস হোভার বা কীবোর্ড শর্টকাটের বদলে ট্যাপ, সোয়াইপ, পিঞ্চ, লং-প্রেসের মতো জেসচার — সম্পূর্ণ ভিন্ন ইন্টারঅ্যাকশন মডেল।
একটি ওয়েব পেজ সাধারণত সবসময় ইন্টারনেট থাকবে ধরে নেয়; একটি ভালো মোবাইল অ্যাপকে ইন্টারনেট ছাড়াও কাজ করতে হয় — সাবওয়ে, দুর্বল সিগন্যাল, এয়ারপ্লেন মোড।
ক্যামেরা, GPS, অ্যাক্সিলারোমিটার, বায়োমেট্রিক সেন্সর — এগুলো একটি নেটিভ মোবাইল অ্যাপের সরাসরি নাগালে, একটি সাধারণ ওয়েব পেজের নয়।
Full-Stack Web Frameworks কোর্সে MVC/MVVM আর্কিটেকচার, ইউনিডাইরেকশনাল স্টেট ফ্লো, টেস্টিং পিরামিড ও CI/CD — এই সাধারণ সফটওয়্যার-আর্কিটেকচার ধারণাগুলো ওয়েবের প্রেক্ষাপটে ইতিমধ্যে শেখানো হয়েছে। এই কোর্স সেগুলো পুনরায় শেখাবে না — বরং একই ধারণাগুলোর মোবাইল-নির্দিষ্ট পার্থক্য শেখাবে: কেন MVVM মোবাইলে বিশেষভাবে জনপ্রিয় (লাইফসাইকেল-অ্যাওয়্যার ডেটা বাইন্ডিংয়ের কারণে), কীভাবে টেস্টিং পিরামিড মোবাইল-নির্দিষ্ট UI অটোমেশন টেস্ট অন্তর্ভুক্ত করে, ইত্যাদি।
৩ · একটি ছোট্ট অ্যাপ-লাইফসাইকেল প্রিভিউ
নিচের কোড সেলে অ্যাপ লাইফসাইকেলের সবচেয়ে মৌলিক ধারণা — একটি সত্যিকারের, স্টেট মেশিন হিসেবে কার্যকর
AppLifecycle ক্লাস — দেখা যাক। এটি নির্দিষ্ট কিছু বৈধ ট্রানজিশনই মেনে চলে, ঠিক যেমন বাস্তব
মোবাইল OS করে — M1-এর পরের পাঠে এটি সম্পূর্ণভাবে (Inactive, Suspended স্টেটসহ) ফরমালি শেখানো হবে।
# একটি সত্যিকারের অ্যাপ-লাইফসাইকেল স্টেট মেশিন
# শুধু নির্দিষ্ট বৈধ ট্রানজিশন মেনে চলে -- ঠিক যেমন বাস্তব মোবাইল OS করে
class AppLifecycle:
ALLOWED = {
'not_running': {'foreground'},
'foreground': {'background'},
'background': {'foreground', 'killed'},
'killed': set(), # টার্মিনাল স্টেট -- নতুন করে চালু করতে হয়
}
def __init__(self):
self.state = 'not_running'
self.history = [self.state]
def transition(self, new_state, reason):
if new_state in self.ALLOWED[self.state]:
old_state = self.state
self.state = new_state
self.history.append(new_state)
print(f"{reason:45s} | {old_state} -> {new_state} (বৈধ)")
return True
else:
print(f"{reason:45s} | {self.state} -> {new_state} (অবৈধ, প্রত্যাখ্যাত)")
return False
app = AppLifecycle()
app.transition('foreground', 'অ্যাপ চালু করা হলো')
app.transition('background', 'ইউজার হোম বাটন চাপলো')
app.transition('foreground', 'ইউজার আবার অ্যাপে ফিরে এলো')
app.transition('background', 'ইউজার আবার হোম বাটন চাপলো')
app.transition('killed', 'OS মেমোরি খালি করতে ব্যাকগ্রাউন্ড অ্যাপ বন্ধ করে দিলো')
app.transition('background', 'ভুল ধারণা: killed থেকে সরাসরি background-এ ফেরা')
print(f"\nমোট স্টেট হিস্ট্রি: {app.history}")
ALLOWED ডিকশনারিতে 'killed' স্টেট থেকে কোনো বৈধ
টার্গেট না থাকায় প্রত্যাখ্যাত হয় — বাস্তবেও একটি সম্পূর্ণ বন্ধ হয়ে যাওয়া অ্যাপ সরাসরি "background"-এ ফিরতে
পারে না, ব্যবহারকারীকে নতুন করে অ্যাপটি চালু করতেই হয় (একটি সম্পূর্ণ নতুন AppLifecycle ইনস্ট্যান্স,
পুরনো স্টেট নিয়ে নয়)।
মোবাইল অ্যাপ ডেভেলপমেন্ট মানে এমন একটি পরিবেশের জন্য ডিজাইন করা যেখানে অ্যাপ যেকোনো মুহূর্তে ব্যাকগ্রাউন্ডে যেতে পারে, ইন্টারনেট হারাতে পারে, বা বন্ধ হয়ে যেতে পারে — এবং তারপরও ব্যবহারকারীর কাছে নির্ভরযোগ্য মনে হতে হবে। এই কোর্স ধাপে ধাপে এই চ্যালেঞ্জগুলো মোকাবিলার আর্কিটেকচারাল টুলকিট শেখাবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ একটি ওয়েব পেজ কি "ব্যাকগ্রাউন্ডে যাওয়া" ধারণাটি একেবারেই অনুভব করে না?
আধুনিক ব্রাউজারে ট্যাব "ব্যাকগ্রাউন্ড ট্যাব" হিসেবে কিছুটা থ্রটল হয় (কম রিসোর্স পায়), কিন্তু এটি মোবাইল OS-এর কঠোরতার তুলনায় অনেক নমনীয় — একটি ব্যাকগ্রাউন্ড ব্রাউজার ট্যাব সাধারণত সম্পূর্ণ "kill" হয় না যতক্ষণ না ব্যবহারকারী নিজে বন্ধ করেন বা ব্রাউজার নিজেই মেমোরি চাপে বন্ধ করে। মোবাইল OS-এ এই সিদ্ধান্ত অনেক বেশি আক্রমণাত্মক ও ঘন ঘন হয় — এটিই মোবাইল ডেভেলপারদের জন্য লাইফসাইকেলকে এত গুরুত্বপূর্ণ করে তোলে।
প্র ০২ "অফলাইন-ফার্স্ট" ডিজাইন করা কেন ওয়েব অ্যাপের চেয়ে মোবাইল অ্যাপে বেশি গুরুত্বপূর্ণ?
একটি ওয়েব অ্যাপ সাধারণত ডেস্কটপে স্থিতিশীল ওয়াই-ফাই বা ইথারনেট সংযোগে ব্যবহৃত হয়। একটি মোবাইল অ্যাপ সাবওয়ে, লিফট, গ্রামীণ এলাকা, বা এয়ারপ্লেন মোডে — যেকোনো পরিস্থিতিতে ব্যবহৃত হতে পারে, যেখানে নেটওয়ার্ক হঠাৎ হারিয়ে যাওয়া স্বাভাবিক। তাই মোবাইল অ্যাপকে ডিজাইন-সময়েই ধরে নিতে হয় নেটওয়ার্ক অনির্ভরযোগ্য — এটি কোনো "এজ কেস" নয়, এটি একটি সাধারণ অবস্থা (M8-M9-এ বিস্তারিত)।
প্র ০৩
উপরের কোড সেলে 'not_running' স্টেট থেকে সরাসরি 'background'-এ যাওয়ার চেষ্টা করলে কী হবে, এবং কেন?
এটি প্রত্যাখ্যাত হবে, কারণ ALLOWED['not_running']-এ শুধু {'foreground'} আছে —
'background' নেই। এটি যৌক্তিকও বটে — একটি অ্যাপ যা কখনো চালুই হয়নি, সে সরাসরি
"ব্যাকগ্রাউন্ডে" থাকতে পারে না; প্রথমে অবশ্যই ফোরগ্রাউন্ডে আসতে হবে (ব্যবহারকারী চালু করলে), তারপরই
ব্যাকগ্রাউন্ডে যাওয়া সম্ভব।
অনুশীলন
-
চিন্তা করুন: আপনার ফোনে এমন কোনো অ্যাপের কথা মনে করুন যা ব্যাকগ্রাউন্ডে যাওয়ার পর আবার
খুললে "যেখানে রেখে গিয়েছিলেন সেখান থেকেই" শুরু হয় (যেমন একটি অসম্পূর্ণ ফর্ম বা ভিডিওর মাঝামাঝি অংশ) — এটি
কীভাবে সম্ভব হয় বলে আপনার মনে হয়?
অ্যাপটি ব্যাকগ্রাউন্ডে যাওয়ার আগে (বা নিয়মিত বিরতিতে) তার বর্তমান স্টেট (ফর্মের ডেটা, ভিডিওর টাইমস্ট্যাম্প) লোকাল স্টোরেজে সংরক্ষণ করে রাখে, এবং আবার ফোরগ্রাউন্ডে ফেরার সময় সেই সংরক্ষিত স্টেট পুনরুদ্ধার করে। একেই "স্টেট রিস্টোরেশন" বলা হয় — M7-এ (L31) এটি বিস্তারিতভাবে শেখানো হবে।
-
পরীক্ষা করুন: উপরের কোড সেলে
ALLOWEDডিকশনারিতে'foreground'-এর তালিকায়'killed'যোগ করুন (ধরে নিন অ্যাপ ফোরগ্রাউন্ডে থাকা অবস্থাতেও ক্র্যাশ করতে পারে), তারপরapp.transition('killed', 'অ্যাপ ক্র্যাশ করলো')ফোরগ্রাউন্ড অবস্থা থেকে কল করে দেখুন এটি এখন বৈধ হয় কি না।ALLOWED['foreground']-কে{'background', 'killed'}-এ পরিবর্তন করার পর, ফোরগ্রাউন্ড অবস্থা থেকে'killed'-এ ট্রানজিশন এখন বৈধ হবে এবং "(বৈধ)" প্রিন্ট হবে — দেখাচ্ছে যেALLOWEDডিকশনারিই একমাত্র জায়গা যেখানে "কোন ট্রানজিশন সম্ভব" তা নির্ধারিত হয়, তাই এটি বদলালেই পুরো স্টেট মেশিনের আচরণ বদলে যায়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ এখন সবগুলো পাঠ উপলব্ধ — অ্যাপ লাইফসাইকেল, মোবাইল UI/UX, MVVM/MVI আর্কিটেকচার, নেটিভ বনাম ক্রস-প্ল্যাটফর্ম, নেভিগেশন, স্টেট ম্যানেজমেন্ট, লোকাল স্টোরেজ, ডিভাইস ফিচার, পারফরম্যান্স, টেস্টিং ও ডিপ্লয়মেন্ট থেকে শুরু করে চূড়ান্ত মোবাইল আর্কিটেকচার ক্যাপস্টোন পর্যন্ত।
- Full-Stack Web Frameworks কোর্স সহোদর কোর্স MVC/MVVM, স্টেট ম্যানেজমেন্ট, টেস্টিং ও CI/CD-র সাধারণ আর্কিটেকচারাল ভিত্তি সেই কোর্সেই তৈরি হয়েছে — এই কোর্স মোবাইল-নির্দিষ্ট পার্থক্য শেখায়।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation, Engineering Economics, Full-Stack Web Frameworks ও Mobile App Development — সব এক জায়গায়।