我正在设计一个 android 应用程序,它将收听传入的 SMS 并以特定方式处理它们。我有一个接收消息并将其发送到意图服务的广播接收器:
Intent serviceIntent = new Intent(context, SMSIntentService.class);
serviceIntent.putExtras(intent.getExtras());
context.startService(serviceIntent);
意图服务的目的是将 SMS 保存到我自己的数据库,然后通过 HTTP POST 将该消息发送到服务器,评估结果并更新应用程序的数据库并最终回复发送者。到目前为止一切都很好,但是由于有可能同时有很多 SMS 到达,我想将与服务器的通信解耦,将其放在另一个线程中。
所以到目前为止我正在做的是:
SmsDto sms = smsDataSource.saveSms(new SmsDto(originator, body, timestamp));
SMSProcessingTask task = new SMSProcessingTask(this.getApplicationContext(), sms);
Thread t = new Thread(task);
t.start();
到目前为止一切都很好,但我不相信这个有大量消息的实现。
所以,我的问题是:
在意图服务中,是否建议使用 ThreadPoolExecutor?我最终会得到这样的结果:
//in IntentService's onCreate
this.executor = Executors.newCachedThreadPool();
//in onHandleIntent()
executor.execute(task);
如果一段时间内没有收到消息并且 IntentService 停止,会发生什么情况。它创建的线程会继续运行吗?
我不知道这种方法是否是处理我想要完成的事情的最佳方式。
谢谢
更新:
- 此应用程序中根本没有 UI 活动。
- 由于与服务器的通信可能需要相当长的时间,我想尽量减少消息的处理时间,因此队列中的下一条短信被快速提取并开始处理。
你