एंड्रॉइड में निश्चित अंतराल पर बैकग्राउंड टास्क चलाना
यह उदाहरण दिखाता है कि Handler और Runnable का उपयोग करके AsyncTask को नियमित अंतराल पर कैसे चलाया जाता है।
⚠️ महत्वपूर्ण नोट
AsyncTask API डिप्रिकेटेड है (API लेवल 30 से)। आधुनिक ऐप्स के लिए Kotlin Coroutines, WorkManager, या ExecutorService का उपयोग करने की सिफारिश की जाती है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनकर नया प्रोजेक्ट बनाएं।
चरण 2: लेआउट XML
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="पीरियॉडिक टास्क डेमो"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
चरण 3: Handler + Runnable दृष्टिकोण (अनुशंसित)
MainActivity.java - AsyncTask के बजाय Handler का उपयोग करें:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Handler handler = new Handler(Looper.getMainLooper());
private Runnable periodicTask;
private static final long INTERVAL_MS = 5000; // 5 सेकंड
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startPeriodicTask();
}
private void startPeriodicTask() {
periodicTask = new Runnable() {
@Override
public void run() {
// यहां अपना बैकग्राउंड कार्य करें
// नेटवर्क कॉल के लिए ExecutorService या Coroutines उपयोग करें
// UI अपडेट के लिए main thread पर चलाएं
runOnUiThread(() ->
Toast.makeText(MainActivity.this,
"टास्क हर 5 सेकंड में चल रहा है", Toast.LENGTH_SHORT).show()
);
// अगली बार के लिए शेड्यूल करें
handler.postDelayed(this, INTERVAL_MS);
}
};
// पहली बार 3 सेकंड बाद शुरू करें
handler.postDelayed(periodicTask, 3000);
}
@Override
protected void onDestroy() {
super.onDestroy();
// लीक रोकने के लिए कॉलबैक हटाएं
handler.removeCallbacks(periodicTask);
}
}
चरण 4: आधुनिक विकल्प - WorkManager (पीरियॉडिक कार्य के लिए सर्वोत्तम)
build.gradle में निर्भरता जोड़ें:
dependencies {
implementation "androidx.work:work-runtime-ktx:2.8.1"
}
PeriodicWorker.java:
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
public class PeriodicWorker extends Worker {
public PeriodicWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
// बैकग्राउंड कार्य यहां करें
Log.d("PeriodicWorker", "पीरियॉडिक कार्य चल रहा है");
return Result.success();
}
}
MainActivity.java में शेड्यूल करें:
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import java.util.concurrent.TimeUnit;
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
PeriodicWorker.class, 15, TimeUnit.MINUTES) // न्यूनतम 15 मिनट
.build();
WorkManager.getInstance(this).enqueue(workRequest);
चरण 5: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
सारांश
| दृष्टिकोण | उपयोग केस | न्यूनतम अंतराल |
|---|---|---|
| Handler + Runnable | UI अपडेट, छोटे कार्य | कोई सीमा नहीं (ms) |
| WorkManager | नेटवर्क, डेटाबेस, सिंक | 15 मिनट |
| AlarmManager + Service | सटीक समय, सिस्टम इवेंट | कोई सीमा नहीं |
ऐप चलाएं
डिवाइस कनेक्ट करें, Run पर क्लिक करें। हर 5 सेकंड में टोस्ट संदेश दिखाई देगा।