2012-07-30 51 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