2011-04-28 71 views
1

我知道很多關於如何停止服務的問題,但之前我沒有找到解決我的特定問題的方法。在哪裏調用stopService()以確保服務停止?

在我的應用程序中,我有一些與一箇中央服務進行通信的活動。對於每個活動,我們在他們的onResume()方法中調用bindService(),在他們的onPause()方法中調用unbindService()。 我遇到的問題是,每當我在兩個活動之間切換時,服務都會被銷燬,然後從頭開始重新創建。

爲了解決這個問題,我考慮調用onCreate()中的startService(),以確保服務保持活動狀態。

我的問題是,我應該在哪裏放置stopService() - 確保在離開應用程序時調用它的方法? 或者,有沒有另一種方式來保持服務運行,而不依賴startService()在兩個活動之間切換?

回答

2

請參閱android service startService() and bindService()以獲得全面的解答。

+0

感謝您的快速響應。我知道我需要在某個時候調用stopService()。我的問題是我不知道該把它放在哪裏。我想確保服務在用戶退出應用程序之前保持運行(即所有活動都已暫停或銷燬)。 onDestroy()似乎不是正確的地方,因爲我們不能依靠它被調用。 – summon 2011-04-28 10:03:41

+0

我能想到的一種方法是在您的服務中有一個後臺線程,用於檢查是否存在任何綁定的活動,如果不存在,則調用stopSelf()。 – rajath 2011-04-28 10:10:25

+0

再次感謝您!使用後臺線程解決了我的問題。 – summon 2011-04-28 12:17:36

1

這就是我如何停止並啓動服務
檢查此link瞭解更多詳情。

public void onClick(View src) { 
    switch (src.getId()) { 
     case R.id.buttonStart: 
      Log.d(TAG, "onClick: starting srvice"); 
      startService(new Intent(this, MyService.class)); 
      break; 
     case R.id.buttonStop: 
      Log.d(TAG, "onClick: stopping srvice"); 
      stopService(new Intent(this, MyService.class)); 
      break; 
    } 
} 

和服務類:

public class MyService extends Service { 
    private static final String TAG = "MyService"; 


    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onCreate"); 


    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onDestroy"); 

    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onStart"); 

    } 
} 

編碼快樂!

相關問題