2013-07-29 54 views
2

我的前同事開發了一種在後臺播放音樂的服務。但是,如果用戶想退出程序,則應用程序將在下面的代碼中調用以停止服務。服務停止,但同時超控的onDestroy方法如何處理在後臺停止的服務

Activity realAct = context.getParent(); 
    if (realAct == null) { 
     realAct = context; 
    } 
    ContextWrapper cw = new ContextWrapper(realAct); 

    cw.stopService(new Intent(cw, MyPlayerService.class)); 

編輯我不能處理它: 簡單地說,活動主要活動開始,然後分次活動啓動服務。然後我按回按鈕,這樣Activity Sub完成。當我在活動主,我打電話上面的停止服務代碼。因此,服務的onDestroy方法不叫

回答

0

再次嘗試使用這樣的方法,在你的服務代碼:

@Override 
public void onDestroy() 
{ 
super.onDestroy(); 
//your code 
} 

它的工作!

+0

下面的代碼是從來沒有所謂的,我試過很多次 @覆蓋 \t公共無效的onDestroy(){ \t \t Log.e(LOG_SERVICE「的服務的onDestroy「); \t \t super.onDestroy(); \t} –

0

您是否試圖在用戶退出應用程序時停止服務?

當系統由於資源不足而需要終止活動時,會調用onDestroy。僅僅因爲你按下了你的應用並不意味着onDestroy會立即被調用。

但是,如果要強制關閉應用,系統將自動調用的onDestroy,叫

完成()

上,無論你是從退出你的應用程序。

如果您想在用戶按下退出按鈕退出時調用onDestroy,請覆蓋onBackPressed()並從那裏調用finish()。

但實際上,這是一個反模式,所以我建議使用onPause()代替。

編輯在OP編輯:

,我認爲我們需要你如何實例化服務的更多細節,但這裏有一些額外的想法:

你有沒有被覆蓋的onDestroy正確並調用父類方法?

如果是這種情況,我可以想到的唯一的另一種可能性是您仍然使用BIND_AUTO_CREATE設置綁定到服務的ServiceConnection對象。在所有這些綁定被刪除之前,服務不會被破壞。

所以一定要做到既:

unbindService(conn); 
stopService(intent); 
+0

親愛的朋友,我將再次更新我的問題。 簡而言之, 活動主要啓動活動子然後活動子啓動服務。然後我按回按鈕,這樣Activity Sub完成。當我在活動主,我打電話上面的停止服務代碼。所以ondestroy方法的服務不叫 –

+0

@WinstonSmith好了,總結一下,你說在服務內部的onDestroy方法從不被調用,即使你在用戶退出時立即從mainactivity調用stopService子活性,我正確嗎? – l46kok

+0

是的你是正確的,現在我被卡住的項目,並不能解決它 –