জাভার উইন্ডো বা ফ্রেমের মতো এন্ড্রয়েডের একটিভিটিও ইউজার ইন্টারফেসের জন্য একটি একক স্ক্রিনের প্রতিনিধিত্ব করে। অ্যান্ড্রয়েড একটিভিটি হল ContextThemeWrapper ক্লাসের সাবক্লাস।
আপনি যদি সি, সি ++ বা জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজ নিয়ে পূর্বে কাজ করে থাকেন তবে আপনি অবশ্যই দেখছেন যে আপনার প্রোগ্রামটি main () ফাংশন থেকে শুরু হয়। অনুরূপভাবে, অ্যান্ড্রয়েড সিস্টেমও একটিভিটি ক্লাস থেকে onCreate () কলব্যাক মেথডকে কল করে প্রোগ্রাম শুরু করে।
একটি একটিভিটি স্টার্ট করার জন্য যেমন কলব্যাক মেথডসমূহের ক্রম রয়েছে, তেমনি একটি একটিভিটি ধ্বংস করার জন্যও কলব্যাক মেথডসমূহের ক্রম রয়েছে। নীচের চিত্রে একটিভিটির জীবন চক্র দেখানো হল (চিত্র সৌজন্যে: android.com)
উপরের চিত্রে লক্ষ্য করলে আমরা দেখতে পাচ্ছি যে, একটি এক্টিভিটি ক্লাসে নিম্নের টেবিলে বর্ণিত কলব্যাক বা ইভেন্টসমূহকে সংজ্ঞায়িত করা যেতে পারে। । আপনার এপ্লিকেশনে সমস্ত কলব্যাক মেথডের প্রয়োগ করার প্রয়োজন নাও পড়তে পারে। তবে এটি গুরুত্বপূর্ণ যে আপনাকে প্রতিটি কলব্যাক এর কাজ বুঝতে হবে এবং আপনার অ্যাপ্সে এই কলব্যাকগুলোর আচরণ বা ব্যবহার অবশ্যই অ্যাপ্স ব্যবহারকারীর চাহিদামত হতে হবে।
ক্রমিক নং |
কলব্যাক ও বর্ণনা |
1 |
onCreate() একটিভিটি তৈরি হওয়ার সময় এটিই প্রথম কলব্যাক এবং কল(call) হয়। |
2 |
onStart() এক্টিভিটি ইউজারের কাছে দৃশ্যমান হয়ে উঠলে এই কলব্যাক কল হয়। |
3 |
onResume() ব্যবহারকারী অ্যাপ্লিকেশনটির সাথে ইন্টারঅ্যাক্ট শুরু করলে এটি কল(call) হয়। |
4 |
onPause() বিরামযুক্ত একক্টিভিটি(paused activity) ইউজার ইনপুট গ্রহণ করে না এবং কোনও কোড কার্যকর(execute) করতে পারে না। যখন বর্তমান এক্টিভিটির বিরতি ঘটে এবং পূর্ববর্তী একটিভিটি আবার শুরু হয় তখন এটি কল হয়। |
5 |
onStop() একটিভিটি আর দৃশ্যমান না হলে এই কলব্যাক কল হয়। |
6 |
onDestroy() এক্টিভিটি সিস্টেম দ্বারা ধ্বংস হওয়ার আগে এই কলব্যাক কল হয়। |
7 |
onRestart() এক্টিভিটি বন্ধের পরে পুনরায় চালু করলে এই কলব্যাক কল হয়। |
উদাহরণ
এই উদাহরণটিতে কিছু সহজ ধাপ অনুসরণ করে অ্যান্ড্রয়েড অ্যাপ্লিকেশন একটিভিটির জীবনচক্র দেখানো হয়েছে। "হ্যালো ওয়ার্ল্ড" অধ্যায়ে আমরা যে অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি তৈরি করেছিলাম তারই কিছু পরিবর্তন করতে নিম্নের ধাপসমূহ অনুসরণ করুন -
ধাপ |
বিবরণ |
1 |
অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করতে হ্যালো ওয়ার্ল্ড উদাহরণ অধ্যায়ে বর্ণিত প্যাকেজ com.example.helloworld এর অধীনে helloworld নাম দেন। |
2 |
নীচের উদাহরণ অনুসারে মেইন একটিভিটি ফাইল MainActivity.java পরিবর্তন করুন। বাকি ফাইলগুলি অপরিবর্তিত রাখুন। |
3 |
অ্যান্ড্রয়েড এমুলেটর চালু করতে অ্যাপ্লিকেশনটি রান করুন এবং অ্যাপ্লিকেশনটিতে করা পরিবর্তনগুলির ফলাফল যাচাই করুন। |
নিম্নের মেইন এক্টিভিটি ফাইলে(src/com.example.helloworld/MainActivity.java) পরিবর্তিতি কন্টেন্ট রয়েছে। এই ফাইলটিতে প্রতিটি মৌলিক জীবনচক্র মেথড অন্তর্ভুক্ত করা হয়েছে। লগ ম্যাসেজ উৎপন্ন করতে Log.d() মেথড ব্যবহার করা হয়ছে -
package com.example.helloworld;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
public class MainActivity extends Activity {
String msg = "Android : ";
/** এক্টিভিটি তৈরি হওয়ার সাথে সাথে এটি কল হয়। */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(msg, "The onCreate() event");
}
/** এক্টিভিটি দৃশ্যমান হতে চলেছে এমন সময়ে কল হয়। */
@Override
protected void onStart() {
super.onStart();
Log.d(msg, "The onStart() event");
}
/** এক্টিভিটি দৃশ্যমান হয়েগেলে এটি কল হয়। */
@Override
protected void onResume() {
super.onResume();
Log.d(msg, "The onResume() event");
}
/** অন্য একটি এক্টিভিটি ফোকাসে আসছে এমন সময়ে কল হয়।*/
@Override
protected void onPause() {
super.onPause();
Log.d(msg, "The onPause() event");
}
/** একটিভিটি অদৃশ্য হয়েগেলে কল হয়।*/
@Override
protected void onStop() {
super.onStop();
Log.d(msg, "The onStop() event");
}
/** একটিভিটি বিনষ্ট হওয়ার ঠিক আগে কল হয়*/
@Override
public void onDestroy() {
super.onDestroy();
Log.d(msg, "The onDestroy() event");
}
}
এক্সএমএল ফাইল ব্যবহার করে একটি একটিভিটি ক্লাস প্রজেক্টের res/layout ফোল্ডারে অবস্থিত সমস্ত UI কম্পোনেন্ট লোড করে। নিম্নের স্টেটমেন্টটি res/layout/activity_main.xml ফাইল থেকে UI কম্পোনেন্ট লোড করেঃ
setContentView(R.layout.activity_main);
একটি অ্যাপ্লিকেশনে কোন রকম বাধা ছাড়াই এক বা একাধিক এক্টিভিটি থাকতে পারে। আপনার অ্যাপ্লিকেশনের জন্য আপনি যে এক্টিভিটি সংজ্ঞায়িত করেছেন তা অবশ্যই আপনার AndroidManifest.xml ফাইলে ঘোষণা করতে হবে এবং আপনার অ্যাপ্লিকেশনের মেইন এক্টিভিটিকে একটি
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sattacademy.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
আপনি যদি আপনার activity এর জন্য MAIN action অথবা LAUNCHER category ডিক্লেয়ার না করেন তবে আপনার অ্যাপ্লিকেশন আইকনটি হোম স্ক্রিনে দেখাবে না।
চলুন, এবার আমরা আমাদের পরিবর্তিত Hello World! প্রোগ্রামটি রান করে দেখি। আমি ধরেই নিচ্ছি environment সেটআপ করার সময় আপনি আপনার AVD তৈরি করেছিলেন।
অ্যান্ড্রয়েড স্টুডিও থেকে অ্যাপটি রান করানোর জন্য , আপনার প্রোজেক্ট এর একটি এক্টিভিটি ফাইল খুলুন এবং এবং টুলবার থেকে রান আইকনটিতে ক্লিক করুন। যদি আপনার সেটআপ এবং অ্যাপ্লিকেশন এর সব কিছু ঠিকঠাক থাকে তবে অ্যান্ড্রয়েড স্টুডিও আপনার AVD তে অ্যাপটি ইনস্টল করবে এবং সঙ্গে সঙ্গে রান ও করবে। এটি একটি এমুলেটর উইন্ডো ডিসপ্লে করবে এবং অ্যান্ড্রয়েড স্টুডিওর LogCat উইন্ডোতে নিম্নের ন্যায় লগ বার্তা দেখাবে-
08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event
চলুন, এবার আমরা অ্যান্ড্রয়েড এমুলেটরের লক স্ক্রিন বাটনটি ক্লিক করার চেষ্টা করি, এটি অ্যান্ড্রয়েড স্টুডিওর LogCat উইন্ডোতে নিম্নলিখিত ইভেন্ট ম্যাসেজ উৎপন্ন করবে-
08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event
চলুন, আমরা আবার অ্যান্ড্রয়েড এমুলেটরটি আনলক করার চেষ্টা করি এবং এটি অ্যান্ড্রয়েড স্টুডিওর LogCat উইন্ডোতে নিম্নলিখিত ইভেন্ট ম্যাসেজ উৎপন্ন করবে-
08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event
পরিশেষে , আবার আমরা অ্যান্ড্রয়েড এমুলেটরটির ব্যাক বাটনে ক্লিক করব এবং এটি অ্যান্ড্রয়েড স্টুডিওর LogCat উইন্ডোতে নিম্নলিখিত ইভেন্ট ম্যাসেজ উৎপন্ন করবে এবং এটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির Activity Life Cycle সম্পূর্ণ করবে।
08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event