java - For 循环使用 Thread.Sleep 跳过两次迭代

标签 java android multithreading

我制作了一个 Android 应用程序,它只需调用您输入的号码范围即可。 从您输入的起始编号开始,以您输入的“完成”编号结束。响铃 7 秒后应用程序自动挂断。 代码如下。

public void onClick(View view){

    EditText starte = (EditText) findViewById(R.id.start);
    EditText finishe = (EditText) findViewById(R.id.finish);
    EditText prefixes = (EditText) findViewById(R.id.prefixes);

    String prefix = prefixes.getText().toString();
    /** Get Telephone number String **/
    int startOriginal = Integer.parseInt(starte.getText().toString());
    int finish = Integer.parseInt(finishe.getText().toString());

    for (int start = startOriginal; start<=finish; start++) {

        startCall(prefix, Integer.toString(start));

        try {
            Thread.sleep(7000);
        }catch(InterruptedException e){
            e.printStackTrace();
        }


    }

    new CallUtilities("endcall");
}

private void startCall(String prefix, String nr){

    Intent intent = new Intent("android.intent.action.CALL");

    Uri data = Uri.parse("tel:"+ prefix + nr);

    /** Setting intent data */
    intent.setData(data);

    /** Starting the caller activity by the implicit intent */
    startActivity(intent);
}

CallUtilities类是我写的,只是通过反射方法结束调用。现在我的问题是,当您输入起始数字和结束数字时,应用程序似乎总是调用第一个数字,例如 1,挂起后它会直接转到 3,然后转到 4 和 5 等等,就像它应该做的那样。知道哪里出了问题吗? 另外,是否可以在此处使用 DisconnectCause 来获取断开连接的原因,以防调用过早挂断? 预先感谢您!

最佳答案

这是一场灾难。由于一些原因。

您(假设 onClick(View v) 在 UI 线程上运行)尝试 hibernate UI 线程。

如果UI线程挂起时间超过5秒,就会导致ANR。

此外,您似乎正在尝试同时启动多个 Activity 。这当然不是设计应用程序的正确方法。

更不用说使用Reflection来访问核心Android组件来结束调用了。这可能会导致您的应用将来出现问题。

我对多项 Activity/ sleep 问题的建议:

  1. 删除循环
  2. 存储下一个尝试的号码
  3. 运行调用函数
  4. onActivityResult您可以确定下一个要尝试的号码
  5. 转到 2。(确保包含结束条件!

关于java - For 循环使用 Thread.Sleep 跳过两次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34766259/

相关文章:

java - 获取简单 ChatBot 程序的代码错误

java - 使用数据库时的 EJB 有状态 session Bean 与无状态 session Bean

android - 在 glThread 上运行长任务而不阻塞 Android 上的 UI 线程

c# - 当来自另一个线程的事件更改属性时, View 不更新

java - Play framework + Ebean : [error] . .. 未找到:类型 Finder

java - Android:将网站作为字符串获取

Android 通知 - 显示完整消息

android - Cordova 插件的输出延迟

c++ - 如果不相等,比较和交换后返回对象?

java - 如何打印整个字符串池?