2015-10-16 61 views
-1

我從後臺運行一些服務調用運行IntentService,但它不等待服務調用返回。經過我的研究,似乎只有兩個選項,1.使用服務而不是IntentService 2.使同步http調用而不是異步。 有什麼辦法,我可以從IntentService異步http調用,並聽取http回調?從IntentService發出異步http調用

+0

使用'Service'爲背景中的'Httpcall' –

回答

3

IntentService是在服務中的後臺線程內託管回調(onHandleIntent)的一種奇特方式。

一旦onHandleIntent返回(不等待異步調用返回結果),intentservice就會關閉。

爲了使其工作,您應該添加另一層同步(例如互斥鎖),但它會浪費intentservice的簡單性。

我想要做的是使http調用同步,或將調用移動到服務(如果您確實需要在服務內部而不是從您的活動或片段等前端組件調用該調用)。

1

從IntentService對您的http後端進行同步調用。 IntentService本身已經在後臺線程上運行,所以只需等待後端調用完成即可。

0

我不知道這是否是你想要的,但如果你想執行一些IntentService工作,而做HTTP操作,那麼你可以使用執行人-S爲:

ExecutorService executor = Executors.newSingleThreadExecutor(); 

then inside IntentService handler: 

Future<?> fut = executor.submit(new Runnable() { 
// here do your network operations 
}); 

// here do some other stuff inside IntentService handler 

// wait for your http operation 
fut.get();