2012-05-30 108 views
1

我想我已經有了IntentService類的意思。它處理一個隊列,以防止太多或更多的服務實例一起執行。有沒有一種方法可以運行多個IntentService?

我發現它很有用,但是如果我的IntentService派生類具有不同的用途,並且我希望他們兩個一起運行而不相互等待呢?

這是如果有任何標誌大或屬性我可以設置,會這樣說:「讓太以上不同勢派生類的意圖服務,以他自己的隊列中運行的每一個」

是有沒有辦法做到這一點?

我知道所有其他的選擇,如「常規」服務,AsyncTesk,手動管理線程,所以請不要建議我考慮使用它們。我知道他們的優點和侷限性。

在此先感謝。

回答

2

沒有什麼能阻止兩個IntentService一起執行。

作爲一個例子,給定的服務,ServiceA

public class ServiceA extends IntentService { 
    ... 
} 

ServiceA一個子類恰當地命名爲ServiceB

public class ServiceB extends ServiceA { 
} 

ServiceB份額的執行器/隊列(或任何除此之外)與ServiceA,即兩者可以在同一時間執行。您可以通過在ServiceA(例如,

protected void onHandleIntent(Intent intent) { 
    for (int i = 0; i < 20; i++) { 
     System.out.println(getClass().getSimpleName() + " says hello"); 
     try { 
      Thread.sleep(2000L); 
     } catch (InterruptedException e) { 
      return; 
     } 
    } 
} 

,然後調用

startService(new Intent(this, ServiceA.class)); 
startService(new Intent(this, ServiceB.class)); 
Activity

。他們將同時運行。

+0

感謝您的良好回答,但您確定嗎?因爲我創建了自己的測試,這讓我得出了不同的結論(可能我做出了錯誤的假設......) –

+1

您可以查看[IntentService.java]的源代碼(https://github.com /android/platform_frameworks_base/blob/master/core/java/android/app/IntentService.java)在github上 - 它爲類的每個實例創建一個處理線程,並且在實例之間共享任何東西,即一個子類將執行其中的任何內容獨立於父類的'onHandleIntent'。 – Jens

+0

非常感謝。這是我的壞事.. –

相關問題