【问题标题】:One concurrent service or multiple services一项并发服务或多项服务
【发布时间】:2012-07-30 09:50:05
【问题描述】:

我正在开发一个应用程序,它实现了BroadcastReceiver 来侦听传入的 SMS。

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

  • 回复 SIM 卡信息
  • 回复 IMEI 信息
  • 回复当前 GPS 位置

这应该如何实现?

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

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

【问题讨论】:

    标签: android concurrency broadcastreceiver android-service


    【解决方案1】:

    我建议创建一个并发的单一服务。您可以使用线程池并在作业到达时向其提交作业。这样您就不必担心长时间运行的作业会影响您的整个服务。

    但是,这确实意味着您将不得不担心对各种不同服务的并发访问。如果每个服务一次只处理一个事务,那么为每种类型的请求创建一个服务可能会更容易。

    如果您决定使用并发服务,那么以下代码是一个示例,说明如何使用 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
        }
    }
    

    【讨论】:

    • 目前 1 个服务 = 1 个事务,所以我会为每个请求坚持一个服务。但是很高兴知道如何同时进行。
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2019-11-04
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多