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

Kotlin ব্যবহার করে Android অ্যাপ ব্যাকগ্রাউন্ডে চলছে কিনা চেক করা

ওভারভিউ

এই উদাহরণটি দেখায় কিভাবে ActivityManager.RunningAppProcessInfo ব্যবহার করে বর্তমান অ্যাপ্লিকেশন ফোরগ্রাউন্ডে চলছে কিনা ব্যাকগ্রাউন্ডে তা যাচাই করা যায়।

প্রয়োজনীয় ধাপসমূহ

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

ধাপ ২: activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp">
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="#008080"
        android:padding="5dp"
        android:text="Background Check Demo"
        android:textColor="#fff"
        android:textSize="24sp"
        android:textStyle="bold" />
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Checking if app is in background..."
        android:textAlignment="center"
        android:textColor="@android:color/holo_red_light"
        android:textSize="18sp"
        android:textStyle="bold" />
</RelativeLayout>

ধাপ ৩: MainActivity.kt (লিগ্যাসি পদ্ধতি - ডিপ্রিকেটেড)

import android.app.ActivityManager
import android.app.ActivityManager.RunningAppProcessInfo
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var textView: TextView
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "App State Demo"
        
        textView = findViewById(R.id.textView)
        checkAppState()
    }
    
    private fun checkAppState() {
        // ⚠️ getMyMemoryState() ডিপ্রিকেটেড (API 29+)
        val runningAppProcessInfo = RunningAppProcessInfo()
        ActivityManager.getMyMemoryState(runningAppProcessInfo)
        
        val isInBackground = runningAppProcessInfo.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND
        
        val message = if (isInBackground) {
            "App is running in BACKGROUND"
        } else {
            "App is in FOREGROUND"
        }
        
        textView.text = message
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
    
    override fun onPause() {
        super.onPause()
        // অ্যাক্টিভিটি পজ করার সময় (ব্যাকগ্রাউন্ডে যাওয়ার সংকেত)
        Toast.makeText(this, "onPause: App going to background", Toast.LENGTH_SHORT).show()
    }
    
    override fun onResume() {
        super.onResume()
        Toast.makeText(this, "onResume: App in foreground", Toast.LENGTH_SHORT).show()
    }
}

⚠️ সতর্কতা: API 29+ (Android 10) থেকে পরিবর্তন

ActivityManager.getMyMemoryState() এবং RunningAppProcessInfo ব্যবহার করুন **ডিপ্রিকেটেড** এবং **ব্লকড** (প্রাইভেসি কারণে)। আধুনিক Android-এ প্রসেস ইনফো এক্সেস সীমাবদ্ধ।

🚀 আধুনিক এবং সঠিক পদ্ধতি: ProcessLifecycleOwner (Jetpack Lifecycle)

এটি আর্কিটেকচার কম্পোনেন্টের অংশ এবং লাইফসাইকেল-আওয়্যার।

Dependencies:

implementation "androidx.lifecycle:lifecycle-process:2.7.0"

Application ক্লাসে বাস্তবায়ন:

import android.app.Application
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.ProcessLifecycleOwner

class MyApplication : Application(), DefaultLifecycleObserver {
    
    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }
    
    override fun onStart(owner: LifecycleOwner) {
        // অ্যাপ ফোরগ্রাউন্ডে এসেছে
        AppState.isInForeground = true
        Logger.d("App entered FOREGROUND")
    }
    
    override fun onStop(owner: LifecycleOwner) {
        // অ্যাপ ব্যাকগ্রাউন্ডে গেল
        AppState.isInForeground = false
        Logger.d("App entered BACKGROUND")
    }
}

// State holder
object AppState {
    @Volatile var isInForeground = false
}

AndroidManifest.xml-এ অ্যাপ্লিকেশন ক্লাস রেজিস্টার:

<application
    android:name=".MyApplication"
    ... >

যেকোনো জায়গা থেকে চেক করুন:

if (AppState.isInForeground) {
    // ফোরগ্রাউন্ডে
} else {
    // ব্যাকগ্রাউন্ডে
}

বিকল্প: ActivityLifecycleCallbacks (পুরানো কিন্তু কার্যকর)

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            private var activityCount = 0
            
            override fun onActivityResumed(activity: Activity) {
                activityCount++
                if (activityCount == 1) {
                    // প্রথম অ্যাক্টিভিটি রিজিউম -> ফোরগ্রাউন্ড
                    AppState.isInForeground = true
                }
            }
            
            override fun onActivityPaused(activity: Activity) {
                activityCount--
                if (activityCount == 0) {
                    // সব অ্যাক্টিভিটি পজ -> ব্যাকগ্রাউন্ড
                    AppState.isInForeground = false
                }
            }
            
            // অন্যান্য মেথড খালি রাখুন
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}

সার্ভিস/ওয়ার্কম্যানেজারের জন্য: Foreground Service

যদি ব্যাকগ্রাউন্ডে কাজ চালিয়ে রাখতে চান, Foreground Service ব্যবহার করুন নোটিফিকেশন সহ।

সারসংক্ষেপ

পদ্ধতিAPI লেভেলসুপারিশ
RunningAppProcessInfo< 29❌ ডিপ্রিকেটেড
ProcessLifecycleOwner21+✅ সেরা (Lifecycle-aware)
ActivityLifecycleCallbacks14+✅ ভালো (লিগ্যাসি সাপোর্ট)
  1. Android-এ সার্ভিস চলছে কিনা যাচাই করার উপায়

  2. Android অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে চলছে কিনা তা যাচাই করার পদ্ধতি

  3. অ্যান্ড্রয়েড অ্যাপ ব্যাকগ্রাউন্ডে চলতে বন্ধ করার পদ্ধতি

  4. আপনার ফোনের পারফরম্যান্স বাড়ান: সহজে ব্যাকগ্রাউন্ড অ্যান্ড্রয়েড অ্যাপস বন্ধ করুন