Not Running — এটি কী, জীবনচক্রের প্রাথমিক অবস্থা

লেখক: IT Sectr প্রকাশিত: 2026-03-03 পড়ার সময়: 11 মিনিট

Not Running — মোবাইল অ্যাপ্লিকেশনের জীবনচক্রের প্রাথমিক অবস্থা যখন এটি এখনও চালু হয়নি বা ইতিমধ্যে কাজ শেষ করেছে। জানুন কীভাবে iOS এবং Android এই অবস্থা পরিচালনা করে, কোন ঘটনাগুলি Not Running থেকে রূপান্তর ঘটায় এবং Swift এবং Kotlin-এ অ্যাপ্লিকেশন শুরু এবং সমাপ্তি সঠিকভাবে কীভাবে পরিচালনা করবেন।

মূল বিষয়

  • Not Running — অ্যাপ্লিকেশন মেমরিতে লোড নয় এবং কোড এক্সিকিউট করছে না, এটি জীবনচক্রের প্রবেশ এবং প্রস্থান বিন্দু
  • শুরু — Not Running থেকে রূপান্তর অ্যাপ আইকনে ট্যাপ, ডিপ লিঙ্ক বা পুশ নোটিফিকেশনের মাধ্যমে ঘটে
  • সমাপ্তি — ব্যবহারকারী সোয়াইপ করে অ্যাপ বন্ধ করে, সিস্টেম মেমরি কম হলে এটি আনলোড করে বা ক্র্যাশ ঘটে
  • কোল্ড স্টার্ট — অ্যাপ্লিকেশন শূন্য থেকে শুরু হয়, সমস্ত অবজেক্ট নতুন করে তৈরি হয়, ক্যাশ থেকে অবস্থা পুনরুদ্ধার হয় না
  • হট স্টার্ট — অ্যাপ্লিকেশন Suspended-এ ছিল এবং সম্পূর্ণ আরম্ভ ছাড়াই Active-এ ফিরে আসে

Not Running — এটি কী অবস্থা

Not Running হল মোবাইল অ্যাপ্লিকেশনের জীবনচক্রের মৌলিক অবস্থা যেখানে এটি ডিভাইসের RAM-এ লোড নয় এবং সিস্টেম সংস্থান ব্যবহার করে না। iOS এবং Android-এ, এই অবস্থার অর্থ অ্যাপ্লিকেশনের সাথে সম্পর্কিত প্রক্রিয়া এবং থ্রেডের সম্পূর্ণ অনুপস্থিতি। ব্যবহারকারী হোম স্ক্রিনে অ্যাপ আইকন দেখেন, কিন্তু অ্যাপ্লিকেশনটি নিজে সক্রিয় নয় এবং সাম্প্রতিক অ্যাপের তালিকায় নেই।

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

সিস্টেম অ্যাপ্লিকেশনটিকে অন্য যেকোনো অবস্থা থেকে Not Running-এ স্থানান্তর করতে পারে। যদি অ্যাপ্লিকেশন ব্যাকগ্রাউন্ড বা Suspended-এ থাকে, অপারেটিং সিস্টেমের অধিকার আছে উচ্চ অগ্রাধিকারপ্রাপ্ত কাজের জন্য পর্যাপ্ত RAM না থাকলে এটি আনলোড করার — উদাহরণস্বরূপ, সক্রিয় অগ্রভূমি অ্যাপ্লিকেশনের জন্য।

ডেভেলপারকে বিবেচনা করতে হবে যে সিস্টেম যেকোনো মুহূর্তে অ্যাপ্লিকেশন সমাপ্ত করতে পারে যখন এটি ব্যাকগ্রাউন্ডে থাকে। এর অর্থ হল সমস্ত অসংরক্ষিত ডেটা হারিয়ে যেতে পারে। তাই, Active থেকে Background-এ রূপান্তরের সময় কী-ভ্যালু স্টোর (UserDefaults, SharedPreferences) বা স্থানীয় ডেটাবেসে অবস্থা সংরক্ষণ করা অত্যন্ত গুরুত্বপূর্ণ।

সিস্টেম কীভাবে নির্ধারণ করে কোন অ্যাপ্লিকেশন আনলোড করবে

iOS বর্তমান অ্যাপ্লিকেশন অবস্থার ভিত্তিতে অগ্রাধিকার ব্যবহার করে: Active-এর সর্বোচ্চ অগ্রাধিকার, তারপর Inactive, Background, Suspended, এবং শেষে Not Running — সর্বনিম্ন অগ্রাধিকার। Android একই রকম প্রক্রিয়া শ্রেণিবিন্যাস ব্যবহার করে: Foreground প্রক্রিয়ার অগ্রাধিকার OOM_ADJ = 0, Visible প্রক্রিয়া = 100, Service প্রক্রিয়া = 200, Background প্রক্রিয়া = 300, Empty প্রক্রিয়া = 400। মান যত বেশি, মেমরি কম হলে প্রক্রিয়া সমাপ্ত হওয়ার সম্ভাবনা তত বেশি।

প্ল্যাটফর্মঅবস্থাআনলোড অগ্রাধিকারবর্ণনা
iOSNot Runningসর্বোচ্চঅ্যাপ্লিকেশন লোড নয় — সিস্টেম সংস্থান ব্যবহার করে না
iOSSuspendedউচ্চঅ্যাপ্লিকেশন মেমরিতে কিন্তু কোড এক্সিকিউট নয় — আনলোডের প্রথম লক্ষ্য
iOSBackgroundমধ্যমঅ্যাপ্লিকেশন ব্যাকগ্রাউন্ড কাজ করছে — টাইমআউটের পর আনলোড
iOSActiveনিম্নসক্রিয় অ্যাপ্লিকেশন — শুধুমাত্র জটিল মেমরি চাপে আনলোড
AndroidEmpty Processসর্বোচ্চসক্রিয় উপাদান ছাড়া প্রক্রিয়া — প্রথমে সরানো হয়
AndroidBackground Processউচ্চদৃশ্যমান Activity ছাড়া ব্যাকগ্রাউন্ড প্রক্রিয়া
AndroidForeground Serviceনিম্ননোটিফিকেশনসহ সার্ভিস — খুব কমই সমাপ্ত হয়
AndroidForeground Processসর্বনিম্নসক্রিয় Activity — সবশেষে সমাপ্ত হয়

অ্যাপ্লিকেশনের কোল্ড এবং ওয়ার্ম স্টার্ট

কোল্ড স্টার্ট ঘটে যখন অ্যাপ্লিকেশন Not Running থেকে সরাসরি Active-এ রূপান্তরিত হয়। সিস্টেম একটি নতুন প্রক্রিয়া তৈরি করে, ক্লাস লোড করে, স্ট্যাটিক ফিল্ড আরম্ভ করে, প্রধান থ্রেড তৈরি করে এবং UI ফ্রেমওয়ার্ক শুরু করে। iOS-এ, এর অর্থ application(_:didFinishLaunchingWithOptions:) কল করা, Android-এ — Application.onCreate() এবং Activity.onCreate() কল করা। কোল্ড স্টার্টের সময় অ্যাপ্লিকেশনের জটিলতার উপর নির্ভর করে 200 ms থেকে কয়েক সেকেন্ড পর্যন্ত হতে পারে।

ওয়ার্ম স্টার্ট (বা হট স্টার্ট) — অ্যাপ্লিকেশন Suspended অবস্থায় ছিল এবং সম্পূর্ণ পুনরায় লোড ছাড়াই কাজ পুনরায় শুরু করে। সিস্টেম মেমরি থেকে শেষ UI স্ট্যাক পুনরুদ্ধার করে, এবং ব্যবহারকারী একই জায়গা থেকে কাজ চালিয়ে যান। ওয়ার্ম স্টার্ট কোল্ড স্টার্টের চেয়ে উল্লেখযোগ্যভাবে দ্রুত কারণ বেশিরভাগ কোড ইতিমধ্যে মেমরিতে লোড। iOS-এ, ওয়ার্ম স্টার্ট application(_:didFinishLaunchingWithOptions:) কল করে না, শুধুমাত্র applicationWillEnterForeground এবং applicationDidBecomeActive কল করে।

কোল্ড এবং ওয়ার্ম স্টার্টের মধ্যে পার্থক্য ব্যবহারকারীর অভিজ্ঞতার জন্য গুরুত্বপূর্ণ। কোল্ড স্টার্টের সময়, ডেভেলপারকে নিশ্চিত করতে হবে যে শুরু যত দ্রুত সম্ভব ঘটে — মডিউলের অলস আরম্ভ, ভারী সংস্থানের বিলম্বিত লোডিং, শুরুতে প্রধান থ্রেডে কাজ কমানো। Google সুপারিশ করে কোল্ড স্টার্ট 500 ms-এর বেশি না হওয়া, Apple — iOS-এর জন্য 400 ms-এর বেশি না হওয়া।

kotlin
// Android-এ কোল্ড স্টার্ট সময় মাপা
class App : Application() {
    private var startTime: Long = 0L

    override fun onCreate() {
        super.onCreate()
        startTime = System.currentTimeMillis()
    }

    fun getStartupTime(): Long {
        return System.currentTimeMillis() - startTime
    }
}

// অলস আরম্ভসহ Activity শুরু
class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by lazy {
        ViewModelProvider(this).get(MainViewModel::class.java)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // প্রথম ফ্রেমের জন্য শুধুমাত্র প্রয়োজনীয় ন্যূনতম
        setupNavigation()
    }

    override fun onPostCreate(savedInstanceState: Bundle?) {
        super.onPostCreate(savedInstanceState)
        // রেন্ডারিংয়ের পর ভারী আরম্ভ
        initializeHeavyModules()
    }
}

উদাহরণ Android-এ কোল্ড স্টার্ট সময় মাপা দেখায়। Application.onCreate() Not Running থেকে Active-এ রূপান্তরের সময় কল হয়। টাইমস্ট্যাম্প প্রক্রিয়া শুরুর সময় রেকর্ড হয়। Activity প্রথম ফ্রেম ব্লক করা এড়াতে lazy ডেলিগেটের মাধ্যমে অলস আরম্ভ ব্যবহার করে। onPostCreate ভারী মডিউল আরম্ভের জন্য সর্বোত্তম জায়গা কারণ UI ইতিমধ্যে রেন্ডার হয়েছে।

iOS-এ Not Running: Swift এবং AppDelegate

iOS-এ, Not Running UIApplicationDelegate প্রোটোকলের মাধ্যমে পরিচালিত হয়। মূল পদ্ধতি: application(_:didFinishLaunchingWithOptions:) কোল্ড স্টার্টের পরে কল হয়, applicationWillTerminate(_:) ব্যবহারকারী অ্যাপ্লিকেশন সমাপ্ত করার আগে কল হয়। তবে, সিস্টেম applicationWillTerminate কল না করেই অ্যাপ্লিকেশন সমাপ্ত করতে পারে — উদাহরণস্বরূপ, জরুরি সমাপ্তি বা মেমরি চাপের সময়। iOS এই পদ্ধতি কল হওয়ার গ্যারান্টি দেয় না, তাই ডেটা applicationDidEnterBackground-এ সংরক্ষণ করা উচিত।

iOS-এ Not Running-এ রূপান্তরের দৃশ্যপট

ব্যবহারকারী App Switcher-এ সোয়াইপ করে ম্যানুয়ালি অ্যাপ্লিকেশন সমাপ্ত করতে পারেন। সিস্টেম ব্যাকগ্রাউন্ডে থাকাকালীন মেমরি থেকে অ্যাপ্লিকেশন আনলোড করতে পারে। অ্যাপ্লিকেশন ক্র্যাশ হতে পারে। সব ক্ষেত্রে, শুরুর সময় তৈরি সব অবজেক্ট ধ্বংস হয়। যে অবস্থা সংরক্ষণ করা হয়নি তা চিরতরে হারিয়ে যায়। iOS 13+-এ, অবস্থা সংরক্ষণের জন্য NSUserActivity বা UIApplication.stateRestorationIdentifier-এর মাধ্যমে অবস্থা পুনরুদ্ধার প্রক্রিয়া ব্যবহার করার সুপারিশ করা হয়।

swift
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    // কোল্ড স্টার্ট: অ্যাপ্লিকেশন Not Running থেকে রূপান্তরিত
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        // ন্যূনতম সার্ভিস সেট আরম্ভ করা
        setupAnalytics()
        configureAppearance()
        return true
    }

    // অ্যাপ্লিকেশন কাজ শেষ করে — শুধুমাত্র ম্যানুয়াল বন্ধ
    func applicationWillTerminate(
        _ application: UIApplication
    ) {
        saveCriticalData()
    }

    // ব্যাকগ্রাউন্ডে যাওয়ার আগে ডেটা সংরক্ষণ
    func applicationDidEnterBackground(
        _ application: UIApplication
    ) {
        saveApplicationState()
    }

    private func saveCriticalData() {
        UserDefaults.standard.synchronize()
    }

    private func saveApplicationState() {
        let state = ["lastScreen": "main", "timestamp": Date()]
        try? NSKeyedArchiver.archivedData(
            withRootObject: state,
            requiringSecureCoding: true
        )
    }
}

কোড iOS-এ সঠিক Not Running হ্যান্ডলিং দেখায়। applicationWillTerminate শুধুমাত্র তখন কল হয় যখন ব্যবহারকারী ম্যানুয়ালি অ্যাপ সমাপ্ত করে। গুরুত্বপূর্ণ ডেটা সংরক্ষণ applicationDidEnterBackground-এ দ্বৈতভাবে করা হয় কারণ এই পদ্ধতি ব্যাকগ্রাউন্ডে যাওয়ার আগে কল হওয়ার গ্যারান্টিযুক্ত। অবস্থা পুনরুদ্ধার কোল্ড স্টার্টের সময় পরে পুনরুদ্ধারের জন্য UI স্ট্যাক সংরক্ষণের অনুমতি দেয়।

Android-এ Not Running: Kotlin এবং প্রক্রিয়া

Android-এ, Not Running মানে অ্যাপ্লিকেশন প্রক্রিয়া বিদ্যমান নয়। Android-এর অন্তর্নিহিত Linux সিস্টেম Zygote প্রক্রিয়ার মাধ্যমে প্রক্রিয়া পরিচালনা করে। যখন কোনো অ্যাপ্লিকেশন চালু হয়, Zygote একটি নতুন প্রক্রিয়া ফর্ক করে, Dalvik/ART লোড করে এবং Application.onCreate() কল করে। Android-এ applicationWillTerminate-এর সরাসরি সমতুল্য নেই — সিস্টেম সতর্কতা ছাড়াই যেকোনো সময় প্রক্রিয়া সমাপ্ত করতে পারে।

Android প্রক্রিয়া জীবনচক্র

যখন প্রথমবার Activity কল করা হয়, সিস্টেম শৃঙ্খল onCreate → onStart → onResume-এর মাধ্যমে প্রক্রিয়া, Application এবং Activity তৈরি করে। যদি ব্যবহারকারী Back চাপেন, Activity ধ্বংস হয় (onDestroy), এবং প্রক্রিয়া সিস্টেম দ্বারা সমাপ্ত হতে পারে। iOS থেকে একটি মূল পার্থক্য: Android-এ, প্রক্রিয়া সক্রিয় Activities ছাড়াও বিদ্যমান থাকতে পারে — উদাহরণস্বরূপ, যদি Foreground Service চলমান থাকে বা সক্রিয় BroadcastReceiver থাকে।

kotlin
// ViewModel-এ SavedStateHandle-এর মাধ্যমে Not Running হ্যান্ডলিং
class MainViewModel(
    private val savedStateHandle: SavedStateHandle
) : ViewModel() {

    companion object {
        private const val KEY_LAST_SCREEN = "last_screen"
        private const val KEY_USER_DATA = "user_data"
    }

    fun saveCurrentState(screen: String, data: String) {
        savedStateHandle[KEY_LAST_SCREEN] = screen
        savedStateHandle[KEY_USER_DATA] = data
    }

    fun restoreState(): AppState? {
        val screen = savedStateHandle.get<String>(KEY_LAST_SCREEN)
        val data = savedStateHandle.get<String>(KEY_USER_DATA)
        return if (screen != null && data != null) {
            AppState(screen, data)
        } else null
    }
}

// Application — Not Running-এর পর প্রথম কলব্যাক
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        initCrashReporter()
        initDependencyInjection()
    }
}

SavedStateHandle হল Android Architecture Components-এর একটি উপাদান যা Not Running-এ রূপান্তরের সময় স্বয়ংক্রিয়ভাবে অবস্থা সংরক্ষণ করে এবং কোল্ড স্টার্টে এটি পুনরুদ্ধার করে। ViewModelProvider-এর মাধ্যমে তৈরি ViewModel স্ক্রিন রোটেশন এবং Activity ধ্বংস থেকে বেঁচে যায়। যখন প্রক্রিয়া সমাপ্ত হয়, SavedStateHandle-এর ডেটা Bundle-এ সিরিয়ালাইজ হয় এবং সংরক্ষিত ইনস্ট্যান্স অবস্থায় সংরক্ষিত হয়।

Not Running-এ রূপান্তরের কারণ

Not Running বিভিন্ন কারণে ঘটে। ব্যবহারকারী ম্যানুয়ালি অ্যাপ্লিকেশন বন্ধ করেন। সিস্টেম মেমরি কম থাকায় অ্যাপ্লিকেশন আনলোড করে। অ্যাপ্লিকেশন একটি ব্যতিক্রমসহ ক্র্যাশ হয়। Android-এ, সিস্টেম ব্যাপক অ্যাপ আপডেট বা ডিভাইস রিবুটের সময় প্রক্রিয়া সমাপ্ত করতে পারে। iOS ব্যাকগ্রাউন্ড কাজের টাইমআউটে (সাধারণত 30 সেকেন্ড) অ্যাপ্লিকেশন সমাপ্ত করতে পারে।

কারণiOSAndroidপ্রতিরোধ করা যায়
ব্যবহারকারী দ্বারা ম্যানুয়াল বন্ধApp Switcher-এ সোয়াইপRecents থেকে সোয়াইপনা — ব্যবহারকারীর কাজ
মেমরি কমমেমরি সতর্কতা সক্রিয়onTrimMemory / LMKআংশিকভাবে — মেমরি অপ্টিমাইজেশন
অ্যাপ্লিকেশন ক্র্যাশNSException / সিগন্যালUncaughtException / ANRহ্যাঁ — ত্রুটি হ্যান্ডলিং এবং ক্র্যাশ রিপোর্টিং
ব্যাকগ্রাউন্ড কাজ টাইমআউটব্যাকগ্রাউন্ড কাজের জন্য 30 সেকেন্ডJobScheduler-এর জন্য 10 মিনিটহ্যাঁ — সঠিক কাজ নির্ধারণ
OS রিবুটapplicationWillTerminate কলBroadcast ACTION_SHUTDOWNনা — সিস্টেম ঘটনা
অ্যাপ আপডেটঘটে না (iOS স্যান্ডবক্স)APK আপডেটে প্রক্রিয়া সমাপ্তনা — সিস্টেম আপডেট

Not Running-এ রূপান্তর নির্ণয় কীভাবে করবেন

iOS-এর জন্য, applicationWillTerminate এবং applicationDidFinishLaunching-এ কনসোল লগিং ব্যবহার করুন। প্রতিটি লঞ্চে UserDefaults-এ একটি ফ্ল্যাগ যোগ করুন — যদি পরবর্তী শুরতে ফ্ল্যাগ অনুপস্থিত থাকে, অ্যাপ্লিকেশনটি অনুচিতভাবে সমাপ্ত হয়েছে। Android-এ, ActivityManager.isBackgroundRestricted() ব্যবহার করুন অ্যাপ্লিকেশন ব্যাকগ্রাউন্ড কাজ চালাতে পারে কিনা তা পরীক্ষা করতে। এছাড়া, onTrimMemory(TRIM_MEMORY_COMPLETE) পর্যবেক্ষণ করুন — এটি ইঙ্গিত যে প্রক্রিয়া সমাপ্ত হবে।

Not Running নিয়ে কাজ করার সেরা অভ্যাস

প্রথম নিয়ম — কখনই ধরে নেবেন না যে applicationWillTerminate বা onDestroy কল হবে। Active থেকে Background-এ প্রতিটি রূপান্তরে গুরুত্বপূর্ণ ডেটা সংরক্ষণ করুন। সাধারণ সেটিংসের জন্য কী-ভ্যালু স্টোর এবং কাঠামোবদ্ধ ডেটার জন্য SQLite/Room ব্যবহার করুন।

দ্বিতীয় নিয়ম — কোল্ড স্টার্ট সময় মাপুন এবং এটি অপ্টিমাইজ করুন। অলস আরম্ভ, প্রধান থ্রেডে কাজ কমানো, সংস্থান প্রি-লোড করা, SplashScreen API ব্যবহার — এগুলি সব লঞ্চ সময়ের ধারণা উন্নত করে। Google সুপারিশ করে চমৎকার UX-এর জন্য কোল্ড স্টার্ট 200 ms-এর কম হওয়া।

তৃতীয় নিয়ম — অবস্থা পুনরুদ্ধার বাস্তবায়ন করুন। iOS-এ, UIApplication.stateRestorationIdentifier এবং NSUserActivity ব্যবহার করুন। Android-এ, onSaveInstanceState-এর সাথে মিলিত ViewModel-এ SavedStateHandle ব্যবহার করুন। এটি ব্যবহারকারীকে অ্যাপ পুনরায় চালুর পর একই জায়গা থেকে কাজ চালিয়ে যাওয়ার অনুমতি দেবে।

চতুর্থ নিয়ম — launchOptions এবং Intent হ্যান্ডেল করুন যার মাধ্যমে অ্যাপ্লিকেশন Not Running-এর পরে শুরু হয়েছিল। ডিপ লিঙ্ক, পুশ নোটিফিকেশন, ইউনিভার্সাল লিঙ্ক — এগুলি সব লঞ্চ প্যারামিটারের মাধ্যমে প্রেরিত হয়। ডেভেলপারকে সঠিকভাবে এই ডেটা বের করতে হবে এবং ব্যবহারকারীকে সংশ্লিষ্ট স্ক্রিনে নির্দেশ দিতে হবে।

swift
// কোল্ড স্টার্টের পর ডিপ লিঙ্ক হ্যান্ডলিং
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
    // নোটিফিকেশন এসেছে কিনা পরীক্ষা
    if let notification = launchOptions?[.remoteNotification] as? [String: Any] {
        handleNotification(notification)
    }
    // ডিপ লিঙ্ক পরীক্ষা
    if let url = launchOptions?[.url] as? URL {
        handleDeepLink(url)
    }
    return true
}

private func handleDeepLink(_ url: URL) {
    guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false),
          let screenId = components.queryItems?.first(where: { $0.name == "screen" })?.value
    else { return }
    openScreen(screenId)
}

কোড iOS কোল্ড স্টার্টে লঞ্চ প্যারামিটার হ্যান্ডলিং দেখায়। launchOptions-এ সেই ডেটা থাকে যা দিয়ে সিস্টেম অ্যাপ্লিকেশন চালু করেছে। নোটিফিকেশন, ডিপ লিঙ্ক এবং ইউনিভার্সাল লিঙ্ক এই ডিকশনারির মাধ্যমে প্রেরিত হয়। ডেভেলপারকে একটি নিরবচ্ছিন্ন ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করতে সমস্ত সম্ভাব্য লঞ্চ দৃশ্যপট সঠিকভাবে হ্যান্ডেল করতে হবে।

সচরাচর জিজ্ঞাসিত প্রশ্ন

Not Running-এ রূপান্তরের সময় ডেটার কী হয়?

স্থায়ী স্টোরেজে (UserDefaults, Core Data, SharedPreferences, Room) সংরক্ষিত ডেটা সংরক্ষিত থাকে। RAM-এর ডেটা — ভেরিয়েবল, ক্যাশ, SavedStateHandle ছাড়া ViewModel অবস্থা — অপূরণীয়ভাবে হারিয়ে যায়। তাই, প্রতিটি Background-এ রূপান্তরে অ্যাপ্লিকেশন অবস্থা সংরক্ষণ করা অত্যন্ত গুরুত্বপূর্ণ।

iOS-এ কোল্ড স্টার্টকে হট স্টার্ট থেকে কীভাবে আলাদা করবেন?

কোল্ড স্টার্টের সময়, application(_:didFinishLaunchingWithOptions:) কল হয়। হট স্টার্টের (Suspended থেকে ফেরত) সময়, এই পদ্ধতি কল হয় না — শুধুমাত্র applicationWillEnterForeground এবং applicationDidBecomeActive সক্রিয় হয়। আপনার যদি শুধুমাত্র কোল্ড স্টার্টে একটি কাজ করার প্রয়োজন হয়, didFinishLaunchingWithOptions-এ একটি ফ্ল্যাগ সেট করুন।

Android অ্যাপ্লিকেশন সক্রিয় Service-সহ Not Running-এ থাকতে পারে?

হ্যাঁ। স্থায়ী নোটিফিকেশনসহ Foreground Service সিস্টেমকে প্রক্রিয়া সমাপ্ত করতে বাধা দেয়, এমনকি সব Activities ধ্বংস হলেও। Background Service (foreground ছাড়া startService) সিস্টেম যেকোনো সময় বন্ধ করতে পারে। চলমান Service মানে প্রক্রিয়া বিদ্যমান, এবং এটি আর Not Running নয়।

সিমুলেটরে Not Running কীভাবে অনুকরণ করবেন?

iOS সিমুলেটরে, App Switcher (Cmd+Shift+H দুইবার, উপরে সোয়াইপ) এর মাধ্যমে অ্যাপ সমাপ্ত করুন। Android এমুলেটরে, adb shell am force-stop com.example.app বা Logcat-এ Stop বাটন ব্যবহার করুন। এর পরে, অ্যাপ্লিকেশন পুনরায় চালু করুন — এটি Not Running থেকে একটি পরিষ্কার কোল্ড স্টার্ট হবে।

Not Running-এর প্রসঙ্গে kill-switch কী?

Kill-switch হল জরুরি অ্যাপ্লিকেশন সমাপ্তির জন্য একটি সার্ভার কমান্ড। এটি ব্যাংকিং এবং কর্পোরেট অ্যাপ্লিকেশনে দূরবর্তী অ্যাক্সেস ব্লক করার জন্য ব্যবহৃত হয়। যদি অ্যাপ্লিকেশন kill কমান্ড পায়, পরবর্তী কোল্ড স্টার্টে এটি UI ব্লক করে এবং পুনরায় প্রমাণীকরণের অনুরোধ করে। iOS-এ, kill-switch ব্লকিং ফ্ল্যাগসহ রিমোট নোটিফিকেশনের মাধ্যমে বাস্তবায়িত হয়।

সারসংক্ষেপ

  • Not Running — জীবনচক্রের প্রাথমিক এবং চূড়ান্ত অবস্থা, অ্যাপ্লিকেশন মেমরিতে লোড নয় এবং কোড এক্সিকিউট করছে না
  • কোল্ড স্টার্ট — Not Running থেকে অ্যাপ্লিকেশনের সম্পূর্ণ পুনরায় শুরু, শূন্য থেকে সব উপাদান আরম্ভ করা প্রয়োজন
  • হট স্টার্ট — Suspended থেকে ফেরত, didFinishLaunchingWithOptions বা Application.onCreate কল করে না
  • ডেটা সংরক্ষণ — Background-এ রূপান্তরের সময় করা অত্যন্ত গুরুত্বপূর্ণ, কারণ Not Running যেকোনো মুহূর্তে ঘটতে পারে
  • iOS — applicationWillTerminate গ্যারান্টিযুক্ত নয়, অবস্থা UserDefaults বা অবস্থা পুনরুদ্ধারের মাধ্যমে সংরক্ষিত হয়
  • Android — প্রক্রিয়া যেকোনো সময় সমাপ্ত হতে পারে, ViewModel-এ SavedStateHandle স্বয়ংক্রিয়ভাবে অবস্থা সংরক্ষণ করে
  • স্টার্টআপ অপ্টিমাইজেশন — অলস আরম্ভ, প্রধান থ্রেডে ন্যূনতম কাজ, দ্রুত প্রথম ফ্রেমের জন্য SplashScreen API

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন