Activity — Android অ্যাপ্লিকেশনের একটি মৌলিক উপাদান যা ইউজার ইন্টারফেস সহ একটি স্ক্রিন উপস্থাপন করে। সিস্টেম একটি কঠোর জীবনচক্রের মাধ্যমে স্ক্রিনগুলি পরিচালনা করে — কলব্যাক onCreate, onResume এবং onDestroy। প্রতিটি Activity AndroidManifest.xml-এ ঘোষণা করা হয় এবং Intent-এর মাধ্যমে চালু করা হয়। Android-এর ইতিহাস সম্পর্কে আরও পড়ুন Google-এর অফিসিয়াল ডকুমেন্টেশন-এ।
মূল বিষয়
Activity — Android অ্যাপ্লিকেশনের একটি মূল উপাদান যা ইউজারের সাথে মিথস্ক্রিয়ার জন্য একটি উইন্ডো সরবরাহ করে। প্রতিটি Activity একটি পৃথক স্ক্রিন পরিচালনা করে: টাস্ক তালিকা, লগইন ফর্ম, ফটো ভিউয়ার। Android সিস্টেম অনুরোধে একটি Activity তৈরি করে এবং যখন অন্য অ্যাপ্লিকেশনের মেমোরির প্রয়োজন হয় তখন এটি ধ্বংস করে।
Activity প্রথম Android 1.0 (2008)-এ আবির্ভূত হয়েছিল এবং ইন্টারফেসের প্রধান বিল্ডিং ব্লক হিসাবে রয়ে গেছে। Google (2026) অনুসারে, Google Play-তে 98% অ্যাপ্লিকেশনে কমপক্ষে একটি Activity থাকে। আধুনিক আর্কিটেকচারে, Google একাধিক Fragment সহ একটি Activity সুপারিশ করে, তবে ক্লাসিক মাল্টি-স্ক্রিন অ্যাপ্লিকেশন একটি সাধারণ অভ্যাস হিসাবে রয়ে গেছে।
Activity stack (back stack) — টাস্ক স্ট্যাক যা নেভিগেশন ইতিহাস সংরক্ষণ করে। যখন ইউজার "পিছনে" টিপেন, বর্তমান Activity ধ্বংস হয় এবং পূর্ববর্তীটি পুনরুদ্ধার করা হয়। সিস্টেম স্বয়ংক্রিয়ভাবে স্ট্যাক পরিচালনা করে, তবে ডেভেলপার launchMode এবং Intent ফ্ল্যাগের মাধ্যমে আচরণ নিয়ন্ত্রণ করতে পারে।
Activity-র জীবনচক্র হল অবস্থা এবং কলব্যাকের একটি সেট যা একটি স্ক্রিন সৃষ্টি থেকে ধ্বংস পর্যন্ত অতিক্রম করে। Lifecycle বোঝা অত্যন্ত গুরুত্বপূর্ণ: ভুল অবস্থা পরিচালনা মেমোরি লিক, ডেটা হারানো এবং অ্যাপ্লিকেশন ক্র্যাশের দিকে নিয়ে যায়।
Android সিস্টেম কঠোর ক্রমে কলব্যাক কল করে। ডেভেলপার সম্পদ আরম্ভ করতে, ডেটা সংরক্ষণ করতে এবং মেমোরি মুক্ত করতে প্রয়োজনীয় পদ্ধতি ওভাররাইড করে। প্রতিটি কলব্যাকের একটি সংশ্লিষ্ট জোড়া রয়েছে: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause।
| কলব্যাক | উদ্দেশ্য | ডেভেলপারের কাজ |
|---|---|---|
| onCreate | Activity তৈরি হলে কল করা হয় | UI আরম্ভ, ViewMenu-তে সাবস্ক্রাইব |
| onStart | Activity দৃশ্যমান হয় | অ্যানিমেশন, ক্যামেরা, GPS শুরু |
| onResume | Activity ইনপুট ফোকাস পায় | ভিডিও, টাইমার পুনরায় শুরু |
| onPause | Activity ফোকাস হারায় | খসড়া সংরক্ষণ, অ্যানিমেশন বন্ধ |
| onStop | Activity অন্য স্ক্রিন দ্বারা লুকানো | ভারী সম্পদ মুক্ত করা |
| onDestroy | Activity ধ্বংস হয় | সাবস্ক্রিপশন পরিষ্কার, Closeable |
Activity-র চারটি অবস্থা রয়েছে: Running (onResume সক্রিয়), Paused (দৃশ্যমান কিন্তু ফোকাস ছাড়া), Stopped (দৃশ্যমান নয়), Destroyed (ধ্বংস)। সিস্টেম মেমোরির অভাবে Stopped অবস্থায় Activity বন্ধ করতে পারে — onSaveInstanceState-এ ডেটা সংরক্ষণ করতে হবে।
আসুন Kotlin উদাহরণ সহ Activity জীবনচক্র-র তিনটি মূল পদ্ধতি দেখি। onCreate — প্রবেশ বিন্দু, একবার কল করা হয়। এখানে setContentView-এর মাধ্যমে লেআউট বাইন্ডিং, RecyclerView আরম্ভ, LiveData সাবস্ক্রিপশন হয়। onStart — Activity ইউজারের কাছে দৃশ্যমান হয়। onResume — Activity ফোকাস পায় এবং মিথস্ক্রিয়ার জন্য প্রস্তুত হয়।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
recyclerView.layoutManager = LinearLayoutManager(this)
loadItems()
}
override fun onStart() {
super.onStart()
startLocationUpdates()
}
override fun onResume() {
super.onResume()
resumeVideoPlayer()
}
}উদাহরণে, onCreate RecyclerView আরম্ভ করে এবং ডেটা লোড করে। onStart জিওলোকেশন আপডেট শুরু করে — একটি সম্পদ যা কেবল স্ক্রিন দৃশ্যমান হলে কাজ করা উচিত। onResume ভিডিওটি পুনরায় শুরু করে যা onPause-এ থামানো হয়েছিল। এই পৃথকীকরণ পেছনে অপ্রয়োজনীয় কাজ প্রতিরোধ করে।
প্রতিটি Activity AndroidManifest.xml ফাইলে ঘোষণা করতে হবে। নিবন্ধন ছাড়া, সিস্টেম স্ক্রিন খুঁজে পাবে না এবং ActivityNotFoundException নিক্ষেপ করবে। ম্যানিফেস্টে ক্লাসের নাম, থিম, ওরিয়েন্টেশন, launchMode এবং Intent ফিল্টার নির্দিষ্ট করা হয়।
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DetailActivity"
android:parentActivityName=".MainActivity" />
</application>exported ফ্ল্যাগ নির্ধারণ করে যে অন্যান্য অ্যাপ্লিকেশন Activity চালু করতে পারে কিনা। মূল স্ক্রিনের জন্য exported=true, অভ্যন্তরীণ স্ক্রিনের জন্য — false। parentActivityName অ্যাট্রিবিউট স্ট্যান্ডার্ড "উপর" নেভিগেশন (Up Navigation) সক্ষম করে।
Intent — একটি অবজেক্ট যা সম্পাদন করার জন্য একটি ক্রিয়া বর্ণনা করে। Activity-র প্রসঙ্গে, Intent ডেটা স্থানান্তর সহ অন্য স্ক্রিন চালু করতে ব্যবহৃত হয়। Intent স্পষ্ট (একটি নির্দিষ্ট ক্লাস নির্দিষ্ট করে) এবং অন্তর্নিহিত (একটি ক্রিয়া নির্দিষ্ট করে, সিস্টেম উপযুক্ত উপাদান নির্বাচন করে) হতে পারে।
// স্পষ্ট Intent — ডেটা সহ DetailActivity চালু করা
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// DetailActivity-তে ডেটা পাওয়া
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""চালু করা Activity থেকে ফলাফল পেতে Activity Result API ব্যবহার করা হয়, যা পুরানো startActivityForResult-কে প্রতিস্থাপন করেছে। নতুন API টাইপ-সেফ, ডিক্লারেটিভ এবং Jetpack Compose-এর সাথে কাজ করে।
private val getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra("result_key")
}
}
fun openPicker() {
val intent = Intent(this, PickerActivity::class.java)
getResult.launch(intent)
}স্ক্রিন ঘোরানো বা কনফিগারেশন পরিবর্তন করলে, Android Activity পুনরায় তৈরি করে — ক্রমান্বয়ে onDestroy এবং onCreate কল করে। অবস্থা সংরক্ষণ ছাড়া, ইউজার প্রবেশ করানো ডেটা, স্ক্রল অবস্থান এবং নির্বাচিত আইটেম হারায়। Android এই সমস্যা সমাধানের জন্য দুটি প্রক্রিয়া সরবরাহ করে: onSaveInstanceState এবং ViewModel।
onSaveInstanceState onDestroy কল করার আগে Bundle-এ সরল ডেটা সংরক্ষণ করে। Jetpack-এর ViewModel Activity পুনর্নির্মাণ সহ্য করে এবং মেমোরিতে ডেটা সংরক্ষণ করে, যা জটিল অবজেক্ট এবং নেটওয়ার্ক অনুরোধের জন্য আরও কার্যকর।
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel স্বয়ংক্রিয়ভাবে ডেটা সংরক্ষণ করে
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Google-এর আধুনিক পদ্ধতি — Single Activity আর্কিটেকচার একটি Activity এবং একাধিক Fragment সহ। অ্যাপ্লিকেশন একটি MainActivity ব্যবহার করে, এবং সমস্ত নেভিগেশন NavHostFragment-এর মাধ্যমে Navigation Component দ্বারা পরিচালিত হয়। সুবিধা: কেন্দ্রীভূত নেভিগেশন, প্রতি স্ক্রিনে শেয়ার্ড ViewModel, Deep Links-এর সঠিক পরিচালনা।
Jetpack Navigation Component back stack ব্যবস্থাপনা, ট্রানজিশন অ্যানিমেশন এবং আর্গুমেন্ট পাসিং স্বয়ংক্রিয় করে। NavHostFragment Activity লেআউটে স্থাপন করা হয়, এবং নেভিগেশন গ্রাফ (NavGraph) সমস্ত স্ক্রিন এবং তাদের মধ্যে সংযোগ বর্ণনা করে। এই পদ্ধতি Google দ্বারা নতুন প্রকল্পের জন্য সুপারিশকৃত এবং Material Design নীতি অনুসরণ করে।
class MainActivity : AppCompatActivity() {
private val navController by lazy {
findViewById<NavHostFragment>(R.id.nav_host_fragment)
.navController
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// AppBar-এর জন্য NavigationUI সেটআপ করা
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}সচরাচর জিজ্ঞাসা
Activity — নিজস্ব জীবনচক্র সহ একটি পূর্ণ অ্যাপ্লিকেশন স্ক্রিন। Fragment — Activity-র ভিতরে UI-র একটি অংশ যা Activity পুনর্নির্মাণ সহ্য করে এবং তার Lifecycle-এর উপর নির্ভর করে। Activity বাধ্যতামূলক, Fragment ঐচ্ছিক।
কোনো সীমা নেই। প্রতিটি স্ক্রিন সাধারণত একটি পৃথক Activity উপস্থাপন করে। সাধারণ অ্যাপ্লিকেশনের জন্য একটি যথেষ্ট, মাল্টি-স্ক্রিনের জন্য — 5 থেকে 20। Google একাধিক Fragment সহ একটি Activity সুপারিশ করে।
launchMode নির্ধারণ করে কিভাবে টাস্ক স্ট্যাকে Activity তৈরি হয়। চারটি মোড: standard (নতুন ইনস্ট্যান্স তৈরি হয়), singleTop, singleTask (প্রতি টাস্কে একটি ইনস্ট্যান্স) এবং singleInstance (পৃথক টাস্ক)। মোড AndroidManifest.xml-এ সেট করা হয়।
Intent-এর মাধ্যমে — extras (putExtra) সহ একটি অবজেক্ট যাতে প্রিমিটিভ, স্ট্রিং, Parcelable বা Serializable থাকতে পারে। ফেরত যোগাযোগের জন্য Activity Result API ব্যবহার করা হয় — startActivityForResult-এর আধুনিক টাইপ-সেফ প্রতিস্থাপন।
Configuration Change — কনফিগারেশন পরিবর্তনে (স্ক্রিন ঘোরানো, ভাষা পরিবর্তন, কীবোর্ড) Activity পুনর্নির্মাণ। সিস্টেম onDestroy → onCreate কল করে। ডেটা সংরক্ষণের জন্য onSaveInstanceState বা Jetpack-এর ViewModel ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন