Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在后退按钮上跳出一个循环_Java_Android_For Loop_Android Activity_Back Button - Fatal编程技术网

Java 在后退按钮上跳出一个循环

Java 在后退按钮上跳出一个循环,java,android,for-loop,android-activity,back-button,Java,Android,For Loop,Android Activity,Back Button,我有一个Android应用程序,有两个活动。在这两个活动的子活动中,我在run()函数中运行无限for循环 我希望活动在以下两种情况之一下返回到上一个视图: 当前日历秒达到高\u秒(59) 用户点击后退按钮 以下代码满足这两个条件中的第一个条件: Runnable mHideRunnable = new Runnable() { @Override public void run() { for (;;) { Ca

我有一个Android应用程序,有两个活动。在这两个活动的子活动中,我在
run()
函数中运行无限
for
循环

我希望活动在以下两种情况之一下返回到上一个视图:

  • 当前日历秒达到
    高\u秒
    (59)
  • 用户点击后退按钮
  • 以下代码满足这两个条件中的第一个条件:

    Runnable mHideRunnable = new Runnable() {
    
        @Override
        public void run() {            
            for (;;) {
                Calendar cal = Calendar.getInstance();
                if (cal.get(Calendar.SECOND) == HIGH_SEC)
                    break;
                System.out.println(cal.get(Calendar.SECOND));
                try {
                    Thread.currentThread().sleep(1000);
                } catch (Exception e) {
                }
            }
            finish();
        }
    };
    

    目前,当用户点击后退按钮时,应用程序冻结。我假设这是因为活动被卡在无限
    for
    循环中。有人知道如何检查“后退”按钮,以便我的代码做出适当的反应吗?

    这是捕获按钮按下事件的方法。您可以根据需要使用它(即后退按钮事件检查)

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // Do whatever you want here.
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    否则,您可以简单地使用:-

    @Override
    public void onBackPressed() {
       Log.d("CDA", "onBackPressed Called");
       // Do your stuff
    }
    

    这就是如何捕获按钮按下事件的方法。您可以根据需要使用它(即后退按钮事件检查)

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // Do whatever you want here.
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    否则,您可以简单地使用:-

    @Override
    public void onBackPressed() {
       Log.d("CDA", "onBackPressed Called");
       // Do your stuff
    }
    
    您可以使用onBackPressed()

    但是,不鼓励对任何不属于正常行为的情况使用“后退”按钮。也许你应该做一个专用的UI按钮

    使用
    while(myBoolean){}

    编辑: 完整示例

    private static volatile boolean run = true;
    
    Runnable mHideRunnable = new Runnable() {
    
        @Override
        public void run() {            
            while (run) {
                Calendar cal = Calendar.getInstance();
                if (cal.get(Calendar.SECOND) == HIGH_SEC)
                    break;
                System.out.println(cal.get(Calendar.SECOND));
                try {
                    Thread.currentThread().sleep(1000);
                } catch (Exception e) {
                }
            }
            finish();
        }
    };
    
    @Override
    public void onBackPressed() {
        run = false;
    }
    
    您可以使用onBackPressed()

    但是,不鼓励对任何不属于正常行为的情况使用“后退”按钮。也许你应该做一个专用的UI按钮

    使用
    while(myBoolean){}

    编辑: 完整示例

    private static volatile boolean run = true;
    
    Runnable mHideRunnable = new Runnable() {
    
        @Override
        public void run() {            
            while (run) {
                Calendar cal = Calendar.getInstance();
                if (cal.get(Calendar.SECOND) == HIGH_SEC)
                    break;
                System.out.println(cal.get(Calendar.SECOND));
                try {
                    Thread.currentThread().sleep(1000);
                } catch (Exception e) {
                }
            }
            finish();
        }
    };
    
    @Override
    public void onBackPressed() {
        run = false;
    }
    

    定义全局布尔值的一种方法。您需要捕捉返回按钮按下事件并将布尔值设置为true。在for循环中,检查boolean是否为true,然后中断循环,否则执行代码。我还没有找到有效的解决方案。也许在这个周末。要不然,过会儿再说。好的!如果您有任何问题,请发回!定义全局布尔值的一种方法。您需要捕捉返回按钮按下事件并将布尔值设置为true。在for循环中,检查boolean是否为true,然后中断循环,否则执行代码。我还没有找到有效的解决方案。也许在这个周末。要不然,过会儿再说。好的!如果您有任何问题,请发回!我将尝试你的方法以及Mudasser Hassan关于跟踪布尔值的想法。onBackPressed将触发布尔值,该布尔值将中断while循环。谢谢没问题,祝你好运!我的“while(true)”语句是为了表明可以使用布尔值,应该更清楚:)请参阅必须使用标志作为volatile private static volatile boolean backFlag;我将尝试你的方法以及Mudasser Hassan关于跟踪布尔值的想法。onBackPressed将触发布尔值,该布尔值将中断while循环。谢谢没问题,祝你好运!我的“while(true)”语句是为了表明可以使用布尔值,应该更清楚:)请参阅必须使用标志作为volatile private static volatile boolean backFlag;谢谢你,这在某一点上会有帮助,尽管我不认为我会用它来解决这个问题。知道吗,这在某一点上会有帮助,尽管我不认为我会用它来解决这个问题