實現代碼
private boolean isMyServiceRunning(Class> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
使用示例
if (isMyServiceRunning(MyBackgroundService.class)) {
// 服務運行中,可停止或通知
} else {
// 未運行,啟動服務
startService(new Intent(this, MyBackgroundService.class));
}
注意事項
getRunningServices 在 Android 8.0+ (API 26) 行為變化:僅返回調用者進程的服務,跨進程檢測需用 PackageManager 查詢組件啟用狀態或維護進程間標誌文件。
- 頻繁調用有性能開銷,建議緩存結果或用 EventBus/廣播通知狀態變化。