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

एंड्रॉइड में सिंगलटन क्लास को हर घंटे कैसे रिफ्रेश करें?

एंड्रॉइड में सिंगलटन ऑटो-रिफ्रेश (हर घंटे)

यह ट्यूटोरियल Timer और TimerTask का उपयोग करके सिंगलटन इंस्टेंस को हर घंटे स्वचालित रूप से रीसेट करने का तरीका दिखाता है।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में File → New Project चुनें।

चरण 2: लेआउट फ़ाइल (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnRefresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="सिंगलटन रिफ्रेश करें (हर 1 घंटे)"
        android:padding="16dp" />

</LinearLayout>

चरण 3: AutoRefreshSingleton.java

package com.example.singletonrefresh;

import android.content.Context;
import java.util.Timer;
import java.util.TimerTask;

public class AutoRefreshSingleton {

    private static volatile AutoRefreshSingleton instance;
    private Context appContext;
    private Timer refreshTimer;

    // स्टेटिक इनिशियलाइज़र - टाइमर यहां शुरू होता है
    static {
        Timer timer = new Timer(true); // डेमन थ्रेड
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                synchronized (AutoRefreshSingleton.class) {
                    // हर घंटे नया इंस्टेंस बनाकर रीसेट करें
                    instance = new AutoRefreshSingleton();
                    // नोट: नया इंस्टेंस appContext खो देगा, पुनः इनिशियलाइज़ेशन की आवश्यकता होगी
                }
            }
        }, 60 * 60 * 1000L, 60 * 60 * 1000L); // 1 घंटे बाद शुरू, हर 1 घंटे दोहराएं
    }

    private AutoRefreshSingleton() {}

    public static synchronized AutoRefreshSingleton getInstance() {
        if (instance == null) {
            instance = new AutoRefreshSingleton();
        }
        return instance;
    }

    public void init(Context context) {
        if (appContext == null) {
            this.appContext = context.getApplicationContext();
        }
    }

    public Context getContext() {
        return appContext;
    }

    public static Context getGlobalContext() {
        return getInstance().getContext();
    }

    // टाइमर रद्द करें (क्लीनअप के लिए)
    public static void cancelTimer() {
        // नोट: इस सरल कार्यान्वयन में टाइमर निजी है
        // उत्पादन में, टाइमर रेफरेंस रखें और cancel() कॉल करें
    }
}

चरण 4: MainActivity.java

package com.example.singletonrefresh;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button btnRefresh;
    private AutoRefreshSingleton singleton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnRefresh = findViewById(R.id.btnRefresh);
        singleton = AutoRefreshSingleton.getInstance();
        singleton.init(getApplicationContext());

        btnRefresh.setOnClickListener(v -> {
            Toast.makeText(this, "सिंगलटन क्लास हर 1 घंटे में ऑटो-रिफ्रेश होती है", Toast.LENGTH_LONG).show();
        });
    }
}

कैसे काम करता है

  1. स्टेटिक ब्लॉक: क्लास लोड होने पर टाइमर शुरू होता है
  2. डेमन थ्रेड: new Timer(true) ऐप को बाहर निकलने से नहीं रोकता
  3. हर घंटे: 60 * 60 * 1000L = 3,600,000 मिलीसेकंड
  4. इंस्टेंस रीसेट: नया इंस्टेंस बनाकर स्टेट साफ़ करता है

⚠️ महत्वपूर्ण सीमाएं

  • कंटेक्स्ट हानि: नया इंस्टेंस appContext खो देता है - पुनः init() कॉल करने की आवश्यकता
  • प्रोसेस मृत्यु: टाइमर प्रोसेस के साथ मर जाता है; पुनः आरंभ पर रीसेट होता है
  • डोज़ मोड: एंड्रॉइड डोज़ मोड में टाइमर विलंबित हो सकते हैं

बेहतर उत्पादन दृष्टिकोण: WorkManager

// Worker वर्ग
public class RefreshWorker extends Worker {
    public RefreshWorker(@NonNull Context context, @NonNull WorkerParameters params) {
        super(context, params);
    }

    @NonNull
    @Override
    public Result doWork() {
        // सिंगलटन रीसेट लॉजिक
        AutoRefreshSingleton.resetInstance();
        return Result.success();
    }
}

// शेड्यूल करें (न्यूनतम 15 मिनट अंतराल)
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(
    RefreshWorker.class, 1, TimeUnit.HOURS)
    .build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "singleton_refresh", ExistingPeriodicWorkPolicy.REPLACE, request);

ऐप चलाएं

बटन पर क्लिक करके पुष्टि करें। सिंगलटन पृष्ठभूमि में हर घंटे स्वचालित रूप से रीसेट हो जाएगा।

एंड्रॉइड में सिंगलटन क्लास को हर घंटे कैसे रिफ्रेश करें? एंड्रॉइड में सिंगलटन क्लास को हर घंटे कैसे रिफ्रेश करें?
  1. Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें? Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें?

    Year API के साथ वर्तमान वर्ष प्राप्त करना यह उदाहरण दर्शाता है कि Android में Year API क्लास का उपयोग करके वर्ष कैसे प्राप्त करें। चरण 1 - नया प्रोजेक्ट बनाएं Android Studio में एक नया प्रोजेक्ट बनाएं: File → New Project पर जाएं और सभी आवश्यक विवरण भरकर नया प्रोजेक्ट बनाएं। चरण 2 - लेआउट XML जोड़े

  1. Android में StringBuilder क्लास का उपयोग कैसे करें? Android में StringBuilder क्लास का उपयोग कैसे करें?

    Android में StringBuilder क्लास का उपयोग उदाहरण में जाने से पहले, हमें पता होना चाहिए कि StringBuilder क्या है। StringBuilder क्लास का उपयोग म्यूटेबल स्ट्रिंग बनाने के लिए किया जाता है और यह थ्रेड-सेफ नहीं है इसलिए एकाधिक थ्रेड्स एक ही समय में StringBuilder क्लास तक पहुंच सकते हैं। यह उदाहरण दर्शाता

  1. एंड्रॉइड में एक फ्रैगमेंट से दूसरे फ्रैगमेंट में डेटा कैसे पास करें? एंड्रॉइड में एक फ्रैगमेंट से दूसरे फ्रैगमेंट में डेटा कैसे पास करें?

    एंड्रॉइड में फ्रैगमेंट-टू-फ्रैगमेंट संचार फ्रैगमेंट्स को एक-दूसरे से सीधे बात नहीं करनी चाहिए। अनुशंसित पैटर्न: **शेयर्ड ViewModel** (आर्किटेक्चर कंपोनेंट्स) या **इंटरफेस कॉलबैक** होस्ट गतिविधि के माध्यम से। दोनों दृष्टिकोण यहां दिखाए गए हैं। दृष्टिकोण 1 - शेयर्ड ViewModel (पसंदीदा, जीवनचक्र-जागरूक