2014-09-26 46 views
0

我添加本地服務我的MainActivity,在的onResume,我這樣做的onDestroy從未被稱爲

@Override 
public void onResume() { 
    super.onResume() 
    boolean is_start = isMyServiceRunning(MyService.class) 
    if (is_start) { 
     bindMyService() 
    } else { 
     startMyService() 
     bindMyService() 
    } 
} 

在我的onPause只是簡單做了「unBindMyService」操作。

另外,我添加了Context.BIND_AUTO_CREATE標誌來綁定服務,結果很奇怪。

  1. 我可以看到的MyService的「的onCreate」和「onBind」與logcat的,這個進展順利
  2. 當我切換到另一個活動或應用程序,該「拆散」之稱,這是正確的!
  3. 當我「強行停止」設置中的服務時,服務的「onDestroy」被調用作爲響應,這沒問題。
  4. 當我從應用程序的「最近列表」中刪除應用程序時,並沒有調用服務的「onDestroy」,我可以解釋爲服務未終止。還行。
  5. 我無法解釋的是,4後,我又啓動了我的應用程序,我注意到服務的「onCreate」和「onBind」被調用,但沒有一個「onDestroy」服務。即使「is_start」爲真,服務也會在沒有調用「onDestroy」的情況下再次創建。

那麼4到5之間發生了什麼?該服務還活着還是已經死了?

+0

發表更多代碼。方法中有什麼是MyServiceRunning,startMyService和bindMyService? – Okas 2014-09-26 11:42:57

+0

smallzhan ...我已經執行所有的服務案例... 我發現了幾件事情。 onething我想說的是,一旦停止服務()被執行,ondestroy服務可以被調用。 – GvSharma 2014-09-26 12:09:25

+1

可能5發生在與可能在沒有警告的情況下被殺死的4不同的進程中 - 檢查日誌中()的進程ID。 – 2014-09-26 12:13:37

回答

1

你需要停止服務來調用onDestroy。 使用這個:

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    stopService(new Intent(this,MyService.class)); 
} 
+0

是的,我知道用'startService'和'bindService'開始的服務,我必須用'unBind'和'stopService'來銷燬它。我認爲服務是「ALIVE」而沒有叫做「stopService」,我可以在我的應用程序中稍後綁定它,但是在我的問題描述的'5'中發生的事情是即使服務是「ALIVE」,當'綁定'從MainActivity被調用,服務被重新創建,這很奇怪。 – smallzhan 2014-09-27 02:53:27