কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে Activity.finish() কীভাবে কাজ করে

এই টিউটোরিয়ালে আমরা শিখব Activity.finish() মেথড কীভাবে কাজ করে, এটি এক্টিভিটি লাইফসাইকেলকে কীভাবে প্রভাবিত করে, এবং ব্যাক স্ট্যাক ম্যানেজমেন্টে এর ভূমিকা।

প্রয়োজনীয় ধাপগুলো

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project এ যান এবং প্রয়োজনীয় বিবরণ পূরণ করে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: মেইন লেআউট ফাইল তৈরি করুন

res/layout/activity_main.xml ফাইলে নিচের কোড যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Main Activity!"
        android:layout_marginTop="25sp"
        android:textSize="25dp"
        android:padding="15dp" />
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="Next Activity" />
</RelativeLayout>

ধাপ ৩: মেইন এক্টিভিটিতে finish() কল করুন

src/MainActivity.java ফাইলে নিচের কোড যোগ করুন:

package app.com.sample;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, NewActivity.class);
                startActivity(intent);
                finish(); // MainActivity ফিনিশ করুন
            }
        });
    }
}

ধাপ ৪: দ্বিতীয় এক্টিভিটির লেআউট তৈরি করুন

Project → Package-এ Right click → New → Activity → Empty Activity → নাম: NewActivity

res/layout/activity_new.xml ফাইলে নিচের কোড যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NewActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Activity!"
        android:textStyle="bold"
        android:textColor="@color/colorAccent"
        android:layout_marginTop="25sp"
        android:textSize="25dp"
        android:padding="15dp" />
</RelativeLayout>

ধাপ ৫: দ্বিতীয় এক্টিভিটি ক্লাস তৈরি করুন

src/NewActivity.java ফাইলে নিচের কোড যোগ করুন:

package app.com.sample;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class NewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);
    }
}

ধাপ ৬: ম্যানিফেস্টে দুটি এক্টিভিটি রেজিস্টার করুন

AndroidManifest.xml ফাইল:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".NewActivity" />
        <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>

finish() কীভাবে কাজ করে?

  1. এক্টিভিটি ডিস্ট্রয় করা: `finish()` কল করলে এক্টিভিটির `onDestroy()` মেথড কল হয় এবং এক্টিভিটি মেমরি থেকে মুছে যায়।
  2. ব্যাক স্ট্যাক থেকে মুছে ফেলা: এক্টিভিটি টাস্কের ব্যাক স্ট্যাক থেকে রিমুভ হয়।
  3. পূর্বের এক্টিভিটি রিজিউম: যদি ব্যাক স্ট্যাকে পূর্বের এক্টিভিটি থাকে, তবে সেটি `onRestart()` → `onStart()` → `onResume()` এ जाये।
  4. রেজাল্ট পাঠানো: `setResult(RESULT_OK, intent)` কল করে পূর্ণ হওয়ার আগে ডেটা পাঠানো যায়।

finish() vs finishAffinity() vs finishAndRemoveTask()

মেথডব্যাখ্যা
finish()শুধু বর্তমান এক্টিভিটি ডিস্ট্রয় করে
finishAffinity()এই টাস্কের সব এক্টিভিটি ডিস্ট্রয় করে (API 16+)
finishAndRemoveTask()টাস্ক রিমুভ করে এবং রিসেন্ট লিস্ট থেকে সরিয়ে দেয় (API 21+)

সাধারণ ব্যবহারের ক্ষেত্রে

১. লগইন 후 হোম স্ক্রিনে (ব্যাক স্ট্যাক ক্লিয়ার)

Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();

২. ফর্ম সাবমিশন পর প্রিভিউ স্ক্রিনে ফিরে যাওয়া

setResult(RESULT_OK, new Intent().putExtra("data", result));
finish();

৩. স্প্ল্যাশ স্ক্রিন থেকে মেইন এক্টিভিটিতে

new Handler().postDelayed(() -> {
    startActivity(new Intent(this, MainActivity.class));
    finish();
}, 2000);

লাইফসাইকেল কল অর্ডার

// MainActivity-এ finish() কল হলে:
MainActivity: onPause() → onStop() → onDestroy()

// NewActivity-এ ব্যাক প্রেস হলে (যদি MainActivity finish করা থাকে):
// অ্যাপ বন্ধ হয় (হোম স্ক্রিনে ফিরে যায়)

সতর্কতা

  • `finish()` অ্যাসিঙ্ক্রোনাস - তৎক্ষণ এক্টিভিটি ডিস্ট্রয় হয় না
  • `finish()`-এর পরে কোড এক্সিকিউট হতে পারে, তবে UI আপডেট করবেন না
  • চাইল্ড এক্টিভিটি থাকলে প্যারেন্ট `finish()` করলে চাইল্ডও ফিনিশ হয়

সারাংশ

`finish()` এক্টিভিটি ডিস্ট্রয় করে এবং ব্যাক স্ট্যাক থেকে সরিয়ে দেয়। `startActivity()`-এর পর `finish()` কল করলে ব্যবহারকারী ব্যাক প্রেস করলে অ্যাপ বন্ধ হয় (পূর্বের এক্টিভিটি নেই)। রেজাল্ট পাঠাতে `setResult()`-এর পর `finish()` কল করুন।

  1. এন্ড্রয়েডে রেডিও বাটন ব্যবহার করার পদ্ধতি

  2. অ্যান্ড্রয়েডে প্রোগ্রাম্যাটিক্যালি বাটনে drawableLeft সেট করার পদ্ধতি

  3. অ্যান্ড্রয়েডে ডাইনামিক্যালি বাটন যোগ করা

  4. অ্যান্ড্রয়েডে অ্যাপ হাইবারনেশন: কীভাবে কাজ করে এবং ফোন অপ্টিমাইজ করার পদ্ধতি