描述:
如何檢查后臺服務(Android的Service類)是否正在運行?我希望我的Activity能夠顯示Service的狀態,然后我可以打開或者關閉它。
回答:
Android系統提供了一個函數ActivityManager.getRunningServices可以列出當前正在運行的后臺服務線程
private boolean isServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.example.MyService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
這個方法是可靠的,因為這是由Android系統提供的服務查詢辦法。
所以以來于OnDestroy或者OnXXX方法,甚或是Binders以及靜態變量的方法都是不可靠的,因為作為一個開發者,你永遠不知道Android系統什么時候會殺掉你的進程來釋放內存,那些回調函數很可能根本沒機會被調用。
另外,關于如果希望手工檢查所有后臺服務的運行狀態,見如何觀察和控制正在運行的Android后臺服務.