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

অ্যান্ড্রয়েডে onCreate() এবং onStart() এর পার্থক্য

এই টিউটোরিয়ালে আমরা শিখব অ্যান্ড্রয়েড এক্টিভিটি লাইফসাইকেলের onCreate() এবং onStart() মেথডের মধ্যে পার্থক্য, তাদের কল অর্ডার এবং ব্যবহারিক উদ্দেশ্য।

মূল পার্থক্য

দিকonCreate()onStart()
কল হয়এক্টিভিটি প্রথমবার তৈরি হলেএক্টিভিটি দৃশ্যমান হলে
ফ্রিকোয়েন্সিজীবনচক্রে একবারবাড়ি দিয়ে ফিরলে প্রতি বardoor
বান্ডল প্যারামিটারহ্যাঁ (savedInstanceState)না
UI ইনিশিয়ালাইজেশনহ্যাঁ (setContentView, findViewById)না (ইউআই ইতিমধ্যে তৈরি)
দৃশ্যমানতানहीं (ব্যাকগ্রাউন্ডে)হ্যাঁ (ফোরগ্রাউন্ডে)

লাইফসাইকেল ফ্লো

onCreate() → onStart() → onResume() → [Running]
                ↑                    ↓
           onRestart() ← onStop() ← onPause()

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="Have a very nice day!"
        android:textSize="35dp"
        android:textStyle="bold"
        android:textColor="@color/colorAccent"
        android:layout_centerInParent="true"
        android:padding="20sp"
        android:layout_gravity="center_vertical" />
</LinearLayout>

ধাপ ৩: মেইন এক্টিভিটিতে লাইফসাইকেল মেথড লগ করুন

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

package app.com.sample;

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

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "Have a nice day!";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate");
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy");
    }
    
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart");
    }
}

ধাপ ৪: ম্যানিফেস্ট কনফিগার করুন

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=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

লগক্যাট আউটপুট বিশ্লেষণ

অ্যাপ প্রথমবার লঞ্চ হলে:

I/Have a nice day!: onCreate
I/Have a nice day!: onStart
I/Have a nice day!: onResume

হোম বাটন চাপলে (অ্যাপ ব্যাকগ্রাউন্ডে):

I/Have a nice day!: onPause
I/Have a nice day!: onStop

অ্যাপটি আবার খুললে (রিসিউম):

I/Have a nice day!: onRestart
I/Have a nice day!: onStart
I/Have a nice day!: onResume

ব্যাক বাটন চাপলে (এক্টিভিটি ফিনিশ):

I/Have a nice day!: onPause
I/Have a nice day!: onStop
I/Have a nice day!: onDestroy

প্রতিটি মেথডে কী করা উচিত?

onCreate(Bundle savedInstanceState)

  • setContentView() কল করুন
  • ভিউ বাইন্ডিং (findViewById / ViewBinding)
  • ডেটা ইনিশিয়ালাইজেশন
  • savedInstanceState থেকে স্টেট রিস্টোর করুন
  • ভিউমডেল অনুমান করুন

onStart()

  • ইউআই দৃশ্যমান হওয়ার আগের চূড়ান্ত প্রস্তুতি
  • অ্যানিমেশন শুরু করুন
  • লোকেশন/সেন্সর লিসেনার রেজিস্টার করুন
  • Firebase Analytics স্ক্রিন ভিউ লগ করুন

onResume()

  • ইন্টারঅ্যাকশন রিডি (বাটন ক্লিক, টাচ)
  • ক্যামেরা/মাইক্রোফোন আকুয়ার করুন
  • এক্সক্লুসিভ রিসোর্স অ্যাক্সেস

onPause()

  • অনাবশ্যক রিসোর্স রিলিজ করুন
  • অ্যানিমেশন বন্ধ করুন
  • ডেটা সংরক্ষণ করুন (SharedPreferences, DB)
  • দ্রুত রিটার্ন করুন (পরবর্তী এক্টিভিটি ব্লক হয়)

onStop()

  • বড় রিসোর্স রিলিজ (বিটম্যাপ, নেটওয়ার্ক কানেকশন)
  • UI-রিলেটেড কাজ বন্ধ করুন

onDestroy()

  • ফাইনাল ক্লিনআপ
  • লিসেনার আনরেজিস্টার
  • নোট: সিস্টেম কিল করলে কল নাও হতে পারে

savedInstanceState ব্যবহার

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        // রিস্টোর করুন
        String text = savedInstanceState.getString("key");
    }
}

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    // সংরক্ষণ করুন
    outState.putString("key", "value");
}

সারাংশ

onCreate() = একবার সেটআপ (UI, ডেটা)। onStart() = দৃশ্যমান হওয়ার আগে (প্রতি রিসিউমে)। onResume() = ইন্টারঅ্যাকশন রিডি। এই তিনটি মিলেই "এক্টিভিটি স্টার্ট" হয়।

  1. DirectX 11 এবং DirectX 12-এর পার্থক্য কী?

  2. অ্যান্ড্রয়েডে gravity এবং layout_gravity-এর পার্থক্য

  3. Android-এ Parcelable এবং Serializable-এর পার্থক্য (পুনরাবৃত্তি)

  4. অ্যান্ড্রয়েডে fill_parent এবং wrap_content এর পার্থক্য