1

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

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

  1. 当前日历秒到达HIGH_SEC(59)
  2. 用户点击Back按钮

以下代码满足两者中的第一个:

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按钮,以便我的代码做出适当的反应?

4

2 回答 2

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;
}
于 2013-03-12T07:51:56.607 回答
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
}
于 2013-03-12T07:51:55.000 回答