1

我正在开发一个应用程序来实现BroadcastReceiver监听传入的短信。

例如,根据收到的短信,应用程序将:

  • 发送包含 SIM 信息的回复
  • 回复 IMEI 信息
  • 发送带有当前 GPS 位置的回复
  • ETC

这应该如何实施?

我想到了两种方法,第一种是为每个功能提供一个服务,但我觉得这有点矫枉过正。另一方面,我想创建一个行为类似于控制器的服务,并为每个请求创建一个线程。

它需要并发,因为某些操作可能需要 1 秒,而另一些操作可能需要 1 或 2 分钟。

4

1 回答 1

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
    }
}
于 2012-07-30T15:00:48.540 回答