1

我目前正在尝试编写一个应用程序来向我数据库中的 300 多个号码发送大量短信。

我面临一次性发送它们的问题,我的应用程序将强制关闭,我只能像 27/308 一样发送。

我正在使用 for 循环发送我的短信。

这是否可以解决此问题,我可以在进行下一步之前将我的 for 循环延迟 1-2 秒?

目前我已经尝试过这段代码,但它只休眠 20 秒,然后它会一次性完成所有步骤,而不是每步 20 秒。注释掉我的 sendSms 方法并用 println() 进行测试;

任何帮助将不胜感激。

for (i = 0; i < phoneNumbers.length; i++){
                txtCommand = customIDs[i] + ";" + command + ";&W<";
                if (phoneNumbers[i].length()>0 && txtCommand.length()>0)  {
                    final String Messages = "Phone Number:" + phoneNumbers[i] + " " + "Message:" + txtCommand;
                    myHandler.postDelayed(new Runnable() { 
                        public void run() { 
                            System.out.println(Messages);
                            //sendSMS(phoneNumbers[i], txtCommand);    
                   } 
           }, 20000);
                    }
                else
                    Toast.makeText(getBaseContext(), 
                        "Please enter both phone number and message.", 
                        Toast.LENGTH_SHORT).show();
            }
4

1 回答 1

1

编写的代码将在 for 循环后将所有内容排队运行 20 秒。但是您想要的是让每个任务在前一个任务之后排队运行 20 秒。

您可以尝试将延迟乘以索引:

myHandler.postDelayed(
    ...
, (i + 1) * 20000);

或者,您可以递归地重写循环:

void queueMessage(final String[] phoneNumber, final int index) {
    if (index < phoneNumber.length) {
      // TODO do your validation here
      myHandler.postDelayed(new Runnable() {
          public void run() {
            // TODO do your work here
            queueMessage(phoneNumber, index + 1);
          }
        }, 20000);
    }
  }

顺便说一句,如果您尚未在服务中运行此循环,则应该这样做。

于 2011-02-07T19:47:42.600 回答