我正在编写一个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(新的SmsSender(getApplicationContext(),phoneNumber, message,id))。start();
问题出在哪里?为什么SMS在主线程中发送,而不是我的线程?
答案 0 :(得分:0)
根据android文档
什么是服务?
关于Service类的大多数混淆实际上都围绕着它不是:
服务不是一个单独的过程。 Service对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它与其所属的应用程序运行的过程相同
服务不是一个线程。它不是从主线程开始工作的手段(以避免应用程序无响应错误)。