Android - 在单独的线程中发送短信

4

我正在编写一款Android应用程序(带有服务),当我收到GCM通知时,需要发送一条消息。

主要问题:当我同时发送3条短信时,其他任何操作都会停止很长时间(10-20秒),手机也会被锁定。我尝试在线程中发送短信,但没有任何改变。

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();
        }
    }

}

运行线程

new Thread(new SmsSender(getApplicationContext(), phoneNumber, message, id)).start();

问题在哪里?为什么短信是在主线程中发送,而不是在我的线程中发送?


1
尝试使用Handler并创建匿名线程,使其与主线程分开运行。请参考此链接了解如何实现。 - Kushal
同意 Kush 的观点,使用 Handler 而不是普通线程。 - Shafi
我觉得你的设计还需要再改进一下。你能分享一下设计吗? - Code_Life
1个回答

0

根据Android文档

什么是Service?
大多数关于Service类的困惑实际上都围绕着它不是什么而产生的: Service不是一个独立的进程。Service对象本身并不意味着它在自己的进程中运行;除非另有规定,否则它将在与其所属应用程序相同的进程中运行。
Service不是一个线程。它本身不是在主线程之外执行工作的手段(以避免应用程序无响应错误)。


安卓应用程序(带服务)...我认为您的服务负责通过每次创建新线程发送短信。 - Code_Life
是的,服务负责。但我正在服务中创建新线程。 - czjvic
你为什么要在服务内部创建一个新线程来发送短信?当我创建了一个类似的应用时,我使用listener调用我的意图服务,从而发送我的短信。 - Code_Life

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接