我正在开发一个应用程序来实现BroadcastReceiver
监听传入的短信。
例如,根据收到的短信,应用程序将:
- 发送包含 SIM 信息的回复
- 回复 IMEI 信息
- 发送带有当前 GPS 位置的回复
- ETC
这应该如何实施?
我想到了两种方法,第一种是为每个功能提供一个服务,但我觉得这有点矫枉过正。另一方面,我想创建一个行为类似于控制器的服务,并为每个请求创建一个线程。
它需要并发,因为某些操作可能需要 1 秒,而另一些操作可能需要 1 或 2 分钟。
我正在开发一个应用程序来实现BroadcastReceiver
监听传入的短信。
例如,根据收到的短信,应用程序将:
这应该如何实施?
我想到了两种方法,第一种是为每个功能提供一个服务,但我觉得这有点矫枉过正。另一方面,我想创建一个行为类似于控制器的服务,并为每个请求创建一个线程。
它需要并发,因为某些操作可能需要 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
}
}