我有一个包含两项活动的Android应用。在这两项活动的孩子中,我在for
函数中运行了一个无限run()
循环。
我希望活动在以下两种情况之一下返回上一个视图:
HIGH_SEC
(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();
}
};
目前,当用户点击 Back 按钮时,该应用会冻结。我认为那是因为活动停留在无限for
循环中。有谁知道如何检查 Back 按钮,以便我可以让我的代码做出适当的反应?
答案 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
}