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

অ্যান্ড্রয়েড স্টুডিওতে স্ট্যাটিক ভেরিয়েবল কোথায় এবং কীভাবে ব্যবহার করবেন

এই টিউটোরিয়ালে আমরা শিখব অ্যান্ড্রয়েডে স্ট্যাটিক ভেরিয়েবল কী, কোথায় এবং কীভাবে ব্যবহার করা উচিত, এবং এর জীবনচক্র ও সতর্কতা।

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

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

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: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="MainActivity">
    <TextView
        android:id="@+id/Question"
        android:layout_width="wrap_content"
        android:layout_height="93dp"
        android:padding="8dp"
        android:text="I'm a Static Variable"
        android:layout_marginTop="32sp"
        android:layout_marginLeft="8dp"
        android:textSize="32dp"
        tools:layout_editor_absoluteY="8dp" />
</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 = "I'm a Static Variable";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }
}

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

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>

স্ট্যাটিক ভেরিয়েবল কী?

স্ট্যাটিক ভেরিয়েবল ক্লাস-লেভেলের ভেরিয়েবল যা অবজেক্ট (ইনস্ট্যান্স) এর ন होकर ক্লাসের সাথে সম্পর্কিত। সেটি ক্লাস লোড হলে মেমরিতে একবার অ্যালোকেট হয় এবং সমস্ত ইনস্ট্যান্স শেয়ার করে।

অ্যান্ড্রয়েডে স্ট্যাটিক ভেরিয়েবলের ব্যবহার ক্ষেত্র

✅ উপযোগী ব্যবহার:

  • কনস্ট্যান্টস: public static final String TAG = "MyApp"; (লগিং-এর জন্য)
  • সিঙ্গলটন প্যাটার্ন: অ্যাপ্লিকেশন-ওয়াইড শেয়ার্ড ডেটা
  • ইউটিলিটি মেথডস: হেল্পার ফাংশন যা স্টেট ধরে না
  • ক্যাশ: কম্পিউটেশনালি ব্যয়বহুল ডেটা ক্যাশ করা

❌ এড়ানো উচিত:

  • Context ধারণ করা: static Context context; → মেমরি লিক!
  • View ধারণ করা: static TextView textView; → মেমরি লিক!
  • অবজেক্ট যা লাইফসাইকেল আছে: Activity, Fragment, View, Drawable
  • মিউটেবল শেয়ার্ড স্টেট: থ্রেড সেফটি সমস্যা তৈরি করে

মেমরি লিক উদাহরণ (ভুল পদ্ধতি)

// ❌ কখনো এটা করবেন না
public class MyActivity extends AppCompatActivity {
    public static Context context; // মেমরি লিক!
    public static TextView textView; // মেমরি লিক!
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this; // এক্টিভিটি রেফারেন্স ধরে রাখে
        textView = findViewById(R.id.textView);
    }
}

সঠিক পদ্ধতি: Application ক্লাস বা সিঙ্গলটন

// Application ক্লাসে (সুপারিশ করা)
public class MyApp extends Application {
    private static MyApp instance;
    private String sharedData;
    
    public static MyApp getInstance() { return instance; }
    
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
    
    public String getSharedData() { return sharedData; }
    public void setSharedData(String data) { this.sharedData = data; }
}

// ম্যানিফেস্টে: android:name=".MyApp"

// যেকোনো জায়গা থেকে অ্যাক্সেস:
String data = MyApp.getInstance().getSharedData();

Static vs Instance ভেরিয়েবল

দিকStaticInstance
মেমরিক্লাস লোড হলে একবারপ্রতি অবজেক্টের জন্য আলাদা
অ্যাক্সেসClassName.variableobject.variable
লাইফসাইকেলঅ্যাপ চলাকালীনঅবজেক্টের সাথে জুমelsh
শেয়ারিংসকল ইনস্ট্যান্স শেয়ার করেপ্রতিটি ইনস্ট্যান্সের আলাদা কপি

সারাংশ

স্ট্যাটিক ভেরিয়েবল কনস্ট্যান্ট, ইউটিলিটি, সিঙ্গলটনের জন্য ব্যবহার করুন। Context, View, বা লাইফসাইকেলযুক্ত অবজেক্ট স্ট্যাটিক ফিল্ডে রাখবেন না। শেয়ার্ড ডেটার জন্য Application ক্লাস বা Dependency Injection (Hilt/Koin) ব্যবহার করুন।

  1. অ্যান্ড্রয়েডে LocalBroadcastManager ব্যবহারের পদ্ধতি

  2. অ্যান্ড্রয়েডে ড্র্যাগ অ্যান্ড ড্রপ ইমপ্লিমেন্টেশন

  3. অ্যান্ড্রয়েডে মাউস এবং কীবোর্ড ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েড টিভিতে ADB সেট আপ এবং ব্যবহার করার পদ্ধতি