Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड ऐप के बैकग्राउंड में जाने और फोरग्राउंड में आने का पता कैसे लगाएं?

एंड्रॉइड में ऐप फोरग्राउंड/बैकग्राउंड स्थिति का पता लगाना

आधुनिक एंड्रॉइड (API 26+) ActivityManager.RunningTaskInfo (API 21 में डिप्रिकेट) के बजाय ComponentCallbacks2, ProcessLifecycleOwner, या ActivityLifecycleCallbacks का उपयोग करने की सिफारिश करता है। यह लेख विश्वसनीय, भविष्य-प्रूफ दृष्टिकोण दिखाता है।

दृष्टिकोण 1 - ProcessLifecycleOwner (अनुशंसित, लाइफसाइकिल 2.0+)

लाइफसाइकिल लाइब्रेरी जोड़ें:

dependencies {
    implementation "androidx.lifecycle:lifecycle-process:2.7.0"
}

एप्लिकेशन क्लास

package com.example.applifecycledemo;

import android.app.Application;
import android.util.Log;

import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.ProcessLifecycleOwner;

public class MyApplication extends Application implements DefaultLifecycleObserver {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @Override
    public void onStart(androidx.lifecycle.LifecycleOwner owner) {
        Log.d("AppLifecycle", "ऐप फोरग्राउंड में आया");
        // UI रीफ्रेश करें, कनेक्शन फिर से शुरू करें, आदि।
    }

    @Override
    public void onStop(androidx.lifecycle.LifecycleOwner owner) {
        Log.d("AppLifecycle", "ऐप बैकग्राउंड में गया");
        // टाइमर रोकें, कैश फ्लश करें, संवेदनशील डेटा छिपाएं।
    }
}

मैनिफेस्ट में android:name=".MyApplication" पंजीकृत करें।

दृष्टिकोण 2 - ActivityLifecycleCallbacks (कोई अतिरिक्त निर्भरता नहीं)

public class MyApplication extends Application {

    private int activityReferences = 0;
    private boolean isBackground = false;

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override public void onActivityCreated(android.app.Activity a, Bundle b) {}
            @Override public void onActivityStarted(android.app.Activity a) {
                if (++activityReferences == 1 && isBackground) {
                    isBackground = false;
                    onAppForeground();
                }
            }
            @Override public void onActivityResumed(android.app.Activity a) {}
            @Override public void onActivityPaused(android.app.Activity a) {}
            @Override public void onActivityStopped(android.app.Activity a) {
                if (--activityReferences == 0) {
                    isBackground = true;
                    onAppBackground();
                }
            }
            @Override public void onActivitySaveInstanceState(android.app.Activity a, Bundle b) {}
            @Override public void onActivityDestroyed(android.app.Activity a) {}
        });
    }

    private void onAppForeground() {
        // फोरग्राउंड लॉजिक
    }
    private void onAppBackground() {
        // बैकग्राउंड लॉजिक
    }
}

दृष्टिकोण 3 - ComponentCallbacks2 (कम मेमोरी/ट्रिम इवेंट)

public class MyApplication extends Application implements ComponentCallbacks2 {
    @Override public void onTrimMemory(int level) {
        if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
            // UI छिपा हुआ → ऐप बैकग्राउंड में
        }
    }
}

तुलना

विधिन्यूनतम APIपक्षविपक्ष
ProcessLifecycleOwner14+ (लाइफसाइक्ल लिब के माध्यम से)सरल, जीवनचक्र-संवेदनशील, Jetpack के साथ काम करता हैलाइफसाइक्ल निर्भरता की आवश्यकता
ActivityLifecycleCallbacks14+कोई अतिरिक्त लाइब्रेरी नहीं, बारीक नियंत्रणबॉयलरप्लेट, मैन्युअल रेफरेंस काउंटिंग
ComponentCallbacks214+सिस्टम-स्तरीय ट्रिम इवेंटसटीक फोरग्राउंड/बैकग्राउंड संक्रमण के लिए नहीं

लीगेसी कोड क्यों विफल होता है

मूल उदाहरण ActivityManager.getRunningTasks(1) का उपयोग करता था, जो:

  • API 21+ पर डिप्रिकेट है (केवल कॉलर के अपने टास्क लौटाता है)।
  • GET_TASKS परमिशन की आवश्यकता होती है (सामान्य ऐप्स के लिए प्रतिबंधित)।
  • मल्टी-विंडो/स्प्लिट-स्क्रीन परिदृश्यों पर अविश्वसनीय।

परीक्षण युक्तियाँ

  1. लॉगकैट में "ऐप फोरग्राउंड में आया/बैकग्राउंड में गया" देखें।
  2. होम दबाएं → बैकग्राउंड लॉग दिखाई देता है।
  3. रिसेंट्स से ऐप फिर से खोलें → फोरग्राउंड लॉग दिखाई देता है।
  4. स्प्लिट-स्क्रीन आज़माएं — ProcessLifecycleOwner इसे सही ढंग से संभालता है।

सामान्य उपयोग-मामले

  • बैकग्राउंड पर WebSocket/सॉकेट कनेक्शन रोकें/फोरग्राउंड पर फिर से कनेक्ट करें।
  • ऐप बैकग्राउंड होने पर संवेदनशील स्क्रीन मास्क करें (बैंकिंग ऐप्स)।
  • केवल फोरग्राउंड में एनालिटिक्स "सत्र प्रारंभ/समाप्त" इवेंट भेजें।

मजबूत, रखरखाव योग्य ऐप-स्तरीय जीवनचक्र जागरूकता के लिए ProcessLifecycleOwner चुनें।

  1. जब ऐप अनुमति न दे तो एंड्रॉइड पर स्क्रीनशॉट कैसे लें जब ऐप अनुमति न दे तो एंड्रॉइड पर स्क्रीनशॉट कैसे लें

    एंड्रॉइड का एक मुख्य लाभ जिसने कई तकनीकी उत्साही लोगों को अन्य मोबाइल ऑपरेटिंग सिस्टम पर इसे प्राथमिकता देने के लिए प्रेरित किया है, वह है आप जो चाहें करने की स्वतंत्रता। एंड्रॉइड के साथ, आप कुछ भी इंस्टॉल कर सकते हैं, और अपने फोन के लगभग हर पहलू को कस्टमाइज़ कर सकते हैं। यह सब कहने के बाद, अभी भी क

  1. कमांड प्रॉम्प्ट में बैकग्राउंड और फोरग्राउंड रंग कैसे बदलें कमांड प्रॉम्प्ट में बैकग्राउंड और फोरग्राउंड रंग कैसे बदलें

    यदि आप कमांड प्रॉम्प्ट खोलते हैं, तो यह स्पष्ट होना चाहिए कि बैकग्राउंड रंग काला है। हालांकि, कुछ लोग ऐसे हैं जो रंग बदलना पसंद करेंगे लेकिन उन्हें पता नहीं है कि यह संभावना है। यदि आप उन कई लोगों में से एक हैं, तो चिंता न करें क्योंकि आप सही जगह पर हैं। कमांड प्रॉम्प्ट में बैकग्राउंड रंग बदलें यह ल

  1. Android और iOS पर YouTube ऑडियो को बैकग्राउंड में चलाएं - आसान चरण Android और iOS पर YouTube ऑडियो को बैकग्राउंड में चलाएं - आसान चरण

    YouTube सबसे अधिक देखा जाने वाला वीडियो प्लेटफॉर्म है, लेकिन स्क्रीन लॉक होने पर YouTube ऐप पर गाने चलाना - यानी बैकग्राउंड में - एक मुश्किल काम है। जैसे ही फोन की स्क्रीन लॉक होती है, YouTube स्वचालित रूप से रोक देता है कि आप क्या सुन रहे हैं, जिसका अर्थ है कि आप अपने फोन की स्क्रीन लॉक होने पर वीड