單擊按鈕我想使用方法startService(new Intent(currentActivity.this,MyService.class))
啓動服務,但是如果服務正在運行,我不想調用此方法來避免運行已在運行的服務。這是如何實現的。我在同一個項目中同時使用意向服務和服務,並且希望對兩者都應用相同的條件。如何防止服務再次運行,如果已經運行android
回答
服務將只運行一次,因此您可以多次撥打startService(Intent)
。
您將在服務中收到onStartCommand()
。所以記住這一點。
來源: 注意,要Context.startService()
多次調用不嵌套(儘管也導致他們在多個相應的調用onStartCommand()
),所以無論多少次啓動的服務將被停止一次Context.stopService()
或stopSelf()
被調用;但是,服務可以使用它們的stopSelf(int)
方法來確保服務不會停止,直到處理完啓動的意向。
在:http://developer.android.com/reference/android/app/Service.html在題目:服務生命週期
感謝您的快速回復。您的評論將幫助我很多,但不想再次調用這些方法if服務正在運行。任何其他想法? –
@AtulBhardwaj:調用'startService()'*總是*觸發'onStartComand()'。期。所以,要麼不要調用'startService()',要麼有一個更聰明的'onStartCommand()'來處理多次調用。 – CommonsWare
@CommonsWare得到你的觀點:) –
綁定您服務;開始呼叫時:
Intent bindIntent = new Intent(this,ServiceTask.class);
startService(bindIntent);
bindService(bindIntent,mConnection,0);
那就要檢查一下,如果你的服務工作,請使用類似的方法:
public static boolean isServiceRunning(String serviceClassName){
final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(serviceClassName)){
return true;
}
}
return false;
}
只有當我將服務綁定到活動時,這個代碼才能工作嗎???我認爲綁定服務到活動將運行直到應用程序正在運行。請註釋 –
這不會始終工作。它不考慮「服務被停止」。它主要用於顯示Running Services UI。我已經使用過它,它永遠不會在KitKat中工作。相反,您可以使用startService ALWAYS並使用onCreate和onStartCommand服務來完成您的任務。這是正確的方法。 –
爲什麼在這裏需要**綁定服務**?我們不能只使用** Started Service **嗎? –
使用startService()
。 開始服務將致電onStartCommand()
如果服務尚未啓動,它將致電onCreate()
。初始化你的變量和/或在onCreate()
開始一個線程。
這是正確的答案。 onCreate()被忽略。 – likejiujitsu
每當我們從任何活動開始任何服務時,Android系統調用服務的onStartCommand()方法。如果服務尚未運行,系統首先調用onCreate(),然後調用onStartCommand()。
所以有意思的是,android服務在其生命週期中只有一次啓動,並保持運行直到停止。如果其他客戶端想要再次啓動它,那麼只有onStartCommand()方法會一直調用。
- 1. 如何防止cron作業執行,如果它已經運行
- 2. 如何防止Android異步服務並行運行多次
- 3. Android:停止方法被調用兩次,如果已經運行
- 4. 停止函數如果仍在運行,請再次運行
- 5. 如果已經運行,防止主要活動啓動
- 6. 如果AppsScript服務已被限制,如何讓腳本再次運行?
- 7. 防止任務在仍在運行時再次執行
- 8. Pycharm:如何強制停止服務器,如果它已經在運行
- 9. 錯誤運行軌道服務器,服務器已經運行
- 10. RoR - 「服務器已在運行」 - 如何終止運行的服務器?
- 11. 如果已經運行,排隊Windows服務
- 12. 如何防止Installer.Commit()運行?
- 13. 如果已經運行,請退出VLC
- 14. Java kill程序如果已經運行
- 15. 運行集成測試再次運行服務器
- 16. 如果它已經在運行,請不要運行python腳本
- 17. 如何防止grails服務器端代碼在運行時運行
- 18. Installshield:如何更新已經運行的Windows服務
- 19. 如何調用已經運行的Windows服務?
- 20. 如何停止運行服務?
- 21. 確定腳本已經啓動(如果是首次運行)
- 22. 如果進程已經運行,終止bash腳本
- 23. 如果已經運行,阻止應用程序啓動
- 24. 如何防止服務器未運行時客戶端崩潰?
- 25. 如果已經運行在JVM中,如何指向相同的運行實例?
- 26. 防止服務器端方法的多次運行
- 27. Android異步任務停止運行幾次後運行
- 28. 啓動Android服務已在運行?
- 29. 防止腳本再次在php中運行
- 30. 防止Observable再次運行直到完成
相關http://stackoverflow.com/questions/8019899/starting-a-service-multiple-times –