1

BroadcastReceiver着信SMSをリッスンするを実装するアプリケーションを開発しています。

たとえば、受信したSMSに応じて、アプリは次のようになります。

  • SIM情報を返信する
  • IMEI情報を返信する
  • 現在のGPS位置を返信する

これはどのように実装する必要がありますか?

2つの方法を考えました。1つは機能ごとに1つのサービスを使用する方法ですが、やり過ぎだと感じています。一方、私はコントローラーのように動作し、リクエストごとに1つのスレッドを作成する1つのサービスを作成することを考えています。

一部のアクションには1秒かかる場合があり、別のアクションには1〜2分かかる場合があるため、同時実行する必要があります。

4

1 に答える 1

2

並行する単一のサービスを作成することをお勧めします。スレッドプールを使用して、到着時にジョブを送信できます。そうすれば、サービス全体に影響を与える長時間のジョブについて心配する必要がなくなります。

ただし、これは、さまざまな異なるサービスへの同時アクセスについて心配する必要があることを意味します。各サービスが一度に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
    }
}
于 2012-07-30T15:00:48.540 に答える