एंड्रॉइड में सिंगलटन ऑटो-रिफ्रेश (हर घंटे)
यह ट्यूटोरियल 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();
});
}
}
कैसे काम करता है
- स्टेटिक ब्लॉक: क्लास लोड होने पर टाइमर शुरू होता है
- डेमन थ्रेड:
new Timer(true)ऐप को बाहर निकलने से नहीं रोकता - हर घंटे:
60 * 60 * 1000L= 3,600,000 मिलीसेकंड - इंस्टेंस रीसेट: नया इंस्टेंस बनाकर स्टेट साफ़ करता है
⚠️ महत्वपूर्ण सीमाएं
- कंटेक्स्ट हानि: नया इंस्टेंस
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);
ऐप चलाएं
बटन पर क्लिक करके पुष्टि करें। सिंगलटन पृष्ठभूमि में हर घंटे स्वचालित रूप से रीसेट हो जाएगा।