4

GCM通知を受信したときにメッセージを送信する必要があるAndroidアプリケーション(サービス付き)を作成しています。

主な問題: 同時に 3 つの SMS を送信すると、他の操作が長時間 (10 ~ 20 秒) 停止し、電話もブロックされます。スレッドでSMSを送信しようとしましたが、違いはありません。

SmsSender.java

public class SmsSender implements Runnable{ 
    private Context context;
    private String phoneNumber;
    private String message;
    private int id; 

public SmsSender(Context paramContext, String phoneNumber, String message, int id) {
        super();
        this.context = paramContext;
        this.phoneNumber = phoneNumber;
        this.message = message;
        this.id = id;
    }

    public void run() {
        try {    

        Intent sentIntent = new Intent("sent");
        Intent deliveredIntent = new Intent("delivered");
        sentIntent.putExtra("id", id);
        deliveredIntent.putExtra("id", id);
        PendingIntent sentPI = PendingIntent.getBroadcast(this.context, id,sentIntent, 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(this.context, id, deliveredIntent, 0);           

        SmsManager smsManager = SmsManager.getDefault();                    
        ArrayList<String> parts = smsManager.divideMessage(message);
        ArrayList<PendingIntent> sentList = new ArrayList<PendingIntent>();
        sentList.add(sentPI);
        ArrayList<PendingIntent> deliveredList = new ArrayList<PendingIntent>();
        deliveredList.add(deliveredPI);
        smsManager.sendMultipartTextMessage(phoneNumber, null, parts, sentList, deliveredList);             

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

スレッドを実行

新しいスレッド (新しい SmsSender (getApplicationContext()、phoneNumber、メッセージ、id)).start();

問題はどこだ?SMS が自分のスレッドではなく、メイン スレッドで送信されるのはなぜですか?

4

1 に答える 1

0

アンドロイドのドキュメントによると

サービスとは
Service クラスに関するほとんどの混乱は、実際にはそれがそうでないものに関係しています。つまり、Service は別個のプロセスではありません。Service オブジェクト自体は、それが独自のプロセスで実行されていることを意味しません。特に指定がない限り、アプリケーションと同じプロセスで実行されます。
サービスはスレッドではありません。それ自体は、メイン スレッドから離れて作業を行う手段ではありません (アプリケーションが応答しないエラーを回避するため)。

于 2012-10-16T12:23:55.727 に答える