對於startService狀態,doco「如果此服務尚未運行,它將被實例化並啓動(如果需要,將爲它創建一個進程);如果它正在運行,則它仍然在運行。 我發現每次調用startService似乎都開始了單獨的服務實例,因爲服務正在執行的工作(在我的測試用例中,簡單地寫入新的日誌文件)正在再次完成爲每個電話。 我試圖通過循環ActivityManager ... getRunningServices(Integer.MAX_VALUE)來檢測服務,但它沒有顯示出來。 Android 2.3.3上SGS 11 我很想念這裏的東西。我知道服務的onCreate()方法只在被創建時被調用,並且由於我有一個連續的進程在服務中運行(在我的Activity的onResume方法中,我啓動服務(「myService」)用:阻止Android服務的多個副本
Intent intent = new Intent(this, myService.class);
startService(intent);
在爲MyService我有一個像的onCreate
@Override
public void onCreate(){
super.onCreate();
...
從哪裏設置一個定時器,用一個TimerTask,其寫入日誌文件一次/第二
。 0這按預期工作 - 我可以看到正在寫入的日誌。 在活動的的onResume方法,調用StartService方法之前,我檢查,看是否通過調用包含
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (service.service.getClassName().contentEquals("com.gpsanimator.startrax.myService")) {
Toast.makeText(getApplicationContext(), "Service IS SO running: ", Toast.LENGTH_SHORT).show();
return true;
}
一個checkForRunningService法這種從未發現爲myService服務中存在爲myService服務,儘管這似乎是因爲它正在愉快地寫入日誌文件。
每次我恢復我的Activity時,我的myService服務的onCreate方法被調用 - 它會生成一個新的日誌文件並開始寫入它以及不斷更新的原始日誌文件。 第一次調用startService時服務是否啓動?然後繼續運行?不應該對startService()的後續調用找到已經運行的服務,因此不會再次觸發onCreate()方法?但那不是我所看到的。似乎每次調用startService()都會觸發Service的onCreate()方法。
這顯然比這更復雜,我想深究其中。
不要去讀所有的答案。正如下面提到的StartTrax,當他擴展「IntentService」而不是「Service」類時發生了這種情況。 「問題是我宣佈我的myService類擴展IntentService,而不是Service!一旦我解決了這個問題,它就按照本書一樣工作! – Noundla 2015-12-17 12:30:56