2012-07-30 49 views
1

我正在開發一個應用程序,實現BroadcastReceiver以偵聽傳入的SMS。一個併發服務或多個服務

例如根據收到短信,應用程序將:

  • 發送帶有SIM信息
  • 回覆發送應答與IMEI信息
  • 發送答覆與當前GPS位置

這應該如何實施?

我想到了這樣做的兩種方式,首先爲每個功能提供一項服務,但我覺得它是過度殺傷。另一方面,我創建一個像控制器一樣的服務,併爲每個請求創建一個線程。

它需要併發,因爲一些操作可能需要1秒鐘,另一個可能需要1或2分鐘。

回答

2

我會建議創建一個併發的單個服務。您可以使用線程池並在到達時向其提交作業。那麼您將不必擔心影響您整個服務的長時間運行的工作。

但是,這意味着您將不得不擔心對各種不同服務的併發訪問。如果每個服務只會一次處理單個事務,那麼爲每種類型的請求創建服務可能更容易。

如果您決定使用併發服務,那麼以下代碼是您如何使用ExecutorService線程池的示例。

// create a thread pool with a dynamic number of workers 
ExecutorService threadPool = Executors.newCachedThreadPool(); 
while (!shutdown) { 
    // read your SMS job into an object 
    SmsMessage message = receiveSmsMessage(); 
    threadPool.submit(new SmsJob(message)); 
} 
// once we have submitted all jobs to the thread pool, it should be shutdown 
threadPool.shutdown(); 
... 
public class SmsJob implements Runnable { 
    private SmsMessage message; 
    public MyJobProcessor(SmsMessage message) { 
     this.message = message; 
    } 
    public void run() { 
     // process the message 
    } 
} 
+0

此刻1個服務= 1個事務,所以我會堅持每個請求一個服務。但很高興知道如何同時做到這一點。 – Axxiss 2012-08-01 09:10:03