ActivityManager ব্যবহার করে সার্ভিস রানিং স্টেট চেক করা
অ্যান্ড্রয়েডে কোনো নির্দিষ্ট সার্ভিস বর্তমানে চলছে কিনা তা জানার জন্য ActivityManager.getRunningServices() মেথড ব্যবহার করা হয়। এটি ডিবাগিং, ডুপ্লিকেট সার্ভিস প্রিভেনশন বা UI আপডেটের জন্য উপকারী।
কোড উদাহরণ: isMyServiceRunning() মেথড
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) return false;
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
MainActivity-এ ব্যবহার
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView text = findViewById(R.id.text);
text.setOnClickListener(v -> {
if (isMyServiceRunning(MyService.class)) {
text.setText("Stopped");
stopService(new Intent(this, MyService.class));
} else {
text.setText("Started");
startService(new Intent(this, MyService.class));
}
});
}
// isMyServiceRunning মেথড এখানে থাকবে
}
গুরুত্বপূর্ণ নোটসমূহ
getRunningServices(Integer.MAX_VALUE)সব রানিং সার্ভিস রিটার্ন করেRunningServiceInfo.service.getClassName()দিয়ে ক্লাস নাম মেলানো হয়- এই মেথড UI থ্রেডে কল করা উচিত নয় (হালকা ল্যাগ হতে পারে), ব্যাকগ্রাউন্ড থ্রেডে করুন
- API 21+ এ
getRunningAppProcesses()ও ব্যবহার করা যায় প্রসেস লেভেল চেকের জন্য
আধুনিক বিকল্প (API 26+)
ফোরগ্রাউন্ড সার্ভিসের জন্য ServiceManager বা নোটিফিকেশন ম্যানেজার থেকে চেক করা ভালো। WorkManager-এর ওয়ার্ক স্টেট চেকের জন্য WorkInfo ব্যবহার করুন।
সার্ভিস ক্লাস (MyService.java)
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) { return null; }
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
}
}
Manifest
<service android:name=".MyService" />
