2016-02-12 98 views
0

我想在服務中運行多個線程。像谷歌文檔例子:Android多線程服務

http://developer.android.com/guide/components/services.html

但是,因爲你處理每次調用onStartCommand()自己, 可以同時執行多個請求。這不是 的例子,但如果這就是你想要的,那麼你可以爲每個請求創建一個新的 線程並立即運行它們(而不是等待前一個請求完成的 )。

我怎樣才能同時執行多個請求?

例如,我想要啓動10個線程取決於Message.what。

如何以及在哪裏創建這10個線程?在OnCreate在服務?

但是OnCreate只在創建服務時執行一次。但如果我想添加線程服務dynamicallygenerate message取決於intent extras?例如:

Intent intent1 = new Intent(this, SimpleService.class); 
intent1.putExtra("what", 1); 
Intent intent2 = new Intent(this, SimpleService.class); 
intent2.putExtra("what", 2); 
... 
startService(intent1); 
startService(intent2); 
... 

,我應該創建10個處理器和10尺蠖每個線程?

謝謝!

+0

如果您需要對每個'startService'調用做出反應,您可以使用'onStartCommand'。 'onCreate'只被調用一次。目前還不清楚你想達到什麼目標。 – eleven

+0

多個請求意味着網絡電話? –

+0

@Mustansar Saeed,我的意思是這樣的:我收到網絡請求發送聯繫人並在服務中發送它們,同時發送聯繫人我收到請求發送文件,我想用不同的線程使用相同的服務發送此文件,同時發送聯繫人和文件的另一個請求可以來,等等。 (對不起,延遲迴復,但我沒有任何關於評論和答案的通知電子郵件)。 – jQuick

回答

1

我怎樣才能同時執行多個請求?

使用a ThreadPoolExecutor,配置爲合理數量的線程(例如,2倍的核心數加1)。

如何以及在哪裏創建這10個線程?在OnCreate服務?

您可以在onCreate()中設置ThreadPoolExecutor,或者可能只是在字段初始值設定項中。

但是,當我創建服務時,OnCreate exec只有一次。

這就是爲什麼您使用ThreadPoolExecutor並將其配置爲適當數量的線程。

但是,如果我想添加線程動態服務和生成消息取決於意圖額外?

只需撥打onStartCommand()submit()到一個作品添加到ThreadPoolExecutor。如果有可用的線程,工作將立即運行。如果沒有,你提供一個工作隊列到ThreadPoolExecutor,你提交的工作將等待一個免費的線程。

+0

謝謝你的回答我會嘗試這個(並感謝好書)! – jQuick

+0

@CommonsWare你可以通過一個簡單的例子,我如何使用服務? –