我如何停止循环

How do i stop loop

我正在创建一个垃圾短信应用程序,它将向特定号码发送用户定义数量的短信。

for (i = counter; i > 0; i--) {
                SmsManager smsManager = SmsManager.getDefault();
                smsManager.sendTextMessage(phoneNo, null, message, null, null);
                Toast.makeText(getApplicationContext(), +i + " SMS Remaining", Toast.LENGTH_LONG).show();
            }

所以我使用了一个for循环。并制作了一个应该终止此 for 循环的停止按钮。任何人都可以帮忙解决如何停止这个 for 循环并且应用程序应该进入其初始状态。因为我尝试了 "break" "System.exit(0)" 一切。但是在计数器完成之前消息不会停止发送。

您可以定义一个 volatile 布尔变量,例如:

volatile boolean doStop = false;

并改变你的循环有额外的检查,如:

 for (i = counter; i > 0 && !doStop; i--) {
    ..

当您点击停止按钮时,您将此变量设置为 true,例如:

doStop = true;

我认为你的问题不是退出循环。 Le 循环将终止得太快。
祝酒词一一出示。你认为你可以停止循环,但循环已经完成。尝试在循环中添加一条日志消息。

像这样使用Android Log

Log.d("MyTag", "SMS " + i);

接下来,打开 logcat,您可以按 "MyTag" 筛选。


或者您在主线程中进行循环,然后 UI 被冻结,因此按钮没有响应。

当前代码会遇到的第一个问题是,一旦您单击按钮,它会导致发送大量消息,甚至在用户意识到他发送了那么多消息之前,您需要在每个消息之间引入延迟留言。

下一个问题是您的应用程序可能会挂起,因为您的应用程序将执行发送消息的无限循环,在单独的线程中执行代码会有所帮助。

要解决这两个问题,您必须将发送短信代码放在一个新线程中(为此使用AsyncTask)并在每条消息发送后引入延迟,并在延迟后检查是否停止按钮被点击。

下面是执行此操作的代码:

class SendSMS extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            try {
                while (!dostop) { //if stop button is clicked stop the loop
                    SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(phoneNo, null, message, null, null);
                    Toast.makeText(getApplicationContext(), +i + " SMS Remaining", Toast.LENGTH_LONG).show();                        Thread.sleep(5000);
                }
            } catch (Exception e) {

            }
            return null;
        }
    }

用法:点击发送短信按钮后调用上述代码。

send.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        dostop = false; //set to false first
                                        new SendSMS().execute();
                                    }
                                }
        );

单击停止按钮时需要设置一个变量dostop=true

stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dostop = true;
            }
        });

我还建议添加一些 UI 以显示发送的短信数。