在“后退”按钮上打开循环

时间:2013-03-12 07:47:27

标签: java android for-loop android-activity back-button

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

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

  1. 当前日历秒到达HIGH_SEC(59)
  2. 用户点击后退按钮
  3. 以下代码满足了第一个:

    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();
        }
    };
    

    目前,当用户点击 Back 按钮时,该应用会冻结。我认为那是因为活动停留在无限for循环中。有谁知道如何检查 Back 按钮,以便我可以让我的代码做出适当的反应?

2 个答案:

答案 0 :(得分:1)

您可以使用onBackPressed()

@Override
public void onBackPressed() {
    run = false;
}

但是不建议将后退按钮用于任何不期望的正常行为。也许您应该制作一个专用的UI按钮?

使用for(;;) {}而不是使用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; }

编辑: 完整示例

{{1}}

答案 1 :(得分:0)

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

@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
}