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

एंड्रॉइड में ग्लोबल वेरिएबल कैसे घोषित करें?

एंड्रॉइड में ग्लोबल/शेयर्ड स्टेट प्रबंधित करना

"ग्लोबल वेरिएबल" एंड्रॉइड में मौजूद नहीं हैं जैसे वे C/C++ में होते हैं। इसके बजाय, हम दायरे और जीवनचक्र के आधार पर कई पैटर्न का उपयोग करते हैं: Application उपवर्ग, सिंगलटन, ViewModel, SharedPreferences, या डिपेंडेंसी इंजेक्शन (Hilt/Koin)।

पैटर्न 1 - Application उपवर्ग (प्रक्रिया-स्तरीय स्थिति)

// MyApp.java
public class MyApp extends Application {
    private String globalToken;

    public String getGlobalToken() { return globalToken; }
    public void setGlobalToken(String token) { this.globalToken = token; }
}

मैनिफेस्ट में पंजीकृत करें: <application android:name=".MyApp" ...>।
कहीं भी एक्सेस करें: ((MyApp) getApplication()).getGlobalToken()।

पैटर्न 2 - सिंगलटन (सरल, लेकिन सावधानी से उपयोग करें)

public final class AppSettings {
    private static final AppSettings INSTANCE = new AppSettings();
    private String userName;

    private AppSettings() {}

    public static AppSettings getInstance() { return INSTANCE; }

    public String getUserName() { return userName; }
    public void setUserName(String userName) { this.userName = userName; }
}

उपयोग: AppSettings.getInstance().setUserName("अमित")।
चेतावनी: प्रक्रिया मृत्यु पर स्थिति खो जाती है; UI-संबंधित डेटा के लिए ViewModel पसंद करें।

पैटर्न 3 - ViewModel (UI-स्कोप्ड, कॉन्फिगरेशन-परिवर्तन सुरक्षित)

public class SharedViewModel extends ViewModel {
    private final MutableLiveData sharedText = new MutableLiveData<>();

    public LiveData getSharedText() { return sharedText; }
    public void setSharedText(String text) { sharedText.setValue(text); }
}

गतिविधि/फ्रैगमेंट में:

SharedViewModel vm = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
vm.getSharedText().observe(getViewLifecycleOwner(), text -> textView.setText(text));

पैटर्न 4 - SharedPreferences (स्थायी कुंजी-मान)

// सहेजें
getSharedPreferences("prefs", MODE_PRIVATE).edit().putString("key", "value").apply();

// लोड करें
String val = getSharedPreferences("prefs", MODE_PRIVATE).getString("key", "");

पैटर्न 5 - डिपेंडेंसी इंजेक्शन (Hilt उदाहरण)

@Module
@InstallIn(SingletonComponent.class)
public class AppModule {
    @Provides @Singleton
    static AppSettings provideSettings() { return new AppSettings(); }
}

इंजेक्ट करें: @Inject AppSettings settings;।

तुलना तालिका

पैटर्नस्कोपप्रक्रिया मृत्यु पर जीवित रहता हैजीवनचक्र-जागरूकउपयोग-मामला
Application उपवर्गप्रक्रियानहींनहींटोकन, कैश, इनिट क्रम
सिंगलटनप्रक्रियानहींनहींसरल स्थिति, स्थिरांक
ViewModelगतिविधि/फ्रैगमेंट ग्राफनहीं (लेकिन कॉन्फिग परिवर्तन पर जीवित रहता है)हांUI स्थिति, फॉर्म डेटा
SharedPreferencesस्थायीहांनहींउपयोगकर्ता प्राथमिकताएं, टोकन
Hilt/Koin (सिंगलटन)कंटेनर-परिभाषितनहींस्कोप के साथसेवाएं, रिपॉजिटरी, बड़े ऐप्स

सर्वोत्तम अभ्यास

  • UI स्थिति के लिए स्थिर क्षेत्रों से बचें — वे मेमोरी लीक और क्रैश का कारण बनते हैं।
  • ViewModel को स्क्रीन-स्तरीय डेटा के लिए प्राथमिकता दें; यह घूर्णन से बचता है।
  • Application का उपयोग केवल वास्तव में ग्लोबल, गैर-UI ऑब्जेक्ट्स (OkHttpClient, डेटाबेस इंस्टेंस) के लिए करें।
  • SharedPreferences का उपयोग छोटे स्थायी मूल्यों के लिए करें; बड़े JSON के लिए DataStore/Room का उपयोग करें।
  • DI फ्रेमवर्क मध्यम-बड़े प्रोजेक्ट्स में मैन्युअल सिंगलटन को प्रतिस्थापित करते हैं।

मूल उदाहरण की समीक्षा

दिया गया कोड एक सिंगलटन (singleToneClass) का उपयोग करता है लेकिन TextView पर क्लिक लिसनर के अंदर इसे एक्सेस करता है। यह छोटे डेमो के लिए काम करता है लेकिन उत्पादन के लिए स्केल नहीं करता। ऊपर दिए गए पैटर्न को अपनाएं।

  1. Android में ग्लोबल कॉन्टेक्स्ट के साथ सिंगलटन का उपयोग कैसे करें? Android में ग्लोबल कॉन्टेक्स्ट के साथ सिंगलटन का उपयोग कैसे करें?

    सिंगलटन डिज़ाइन पैटर्न क्या है? सिंगलटन एक डिज़ाइन पैटर्न है जो किसी क्लास के इंस्टेंशिएशन को केवल एक इंस्टेंस तक सीमित करता है। इसके प्रमुख उपयोगों में कंकरेंसी को नियंत्रित करना और एप्लिकेशन के लिए उसके डेटा स्टोर तक पहुंचने का एक केंद्रीय बिंदु बनाना शामिल है। उदाहरण: ग्लोबल कॉन्टेक्स्ट के साथ स

  1. Android Studio में स्टेटिक वेरिएबल कहां और कैसे उपयोग करें Android Studio में स्टेटिक वेरिएबल कहां और कैसे उपयोग करें

    परिचयस्टेटिक वेरिएबल क्लास से संबंधित होते हैं, इंस्टेंस से नहीं। वे सभी इंस्टेंस में साझा होते हैं और क्लास नाम से एक्सेस किए जाते हैं। यह लेख एक्टिविटी जीवनचक्र लॉगिंग के लिए एक स्टेटिक `TAG` का उपयोग दिखाता है।कार्यान्वयनचरण 1: लेआउट (activity_main.xml)<TextView android:id=@+id/Question androi

  1. Android में ग्लोबल वेरिएबल कैसे घोषित करें? Android में ग्लोबल वेरिएबल कैसे घोषित करें?

    सिंगलटन पैटर्न से ग्लोबल वेरिएबल Android में ग्लोबल वेरिएबल के लिए सिंगलटन क्लास पैटर्न का उपयोग करना सर्वोत्तम अभ्यास है। यह उदाहरण दर्शाता है कि एक सिंगलटन क्लास बनाकर पूरे ऐप में डेटा कैसे साझा करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट (activity_