Java 在后退按钮上跳出一个循环
我有一个Android应用程序,有两个活动。在这两个活动的子活动中,我在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
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;谢谢你,这在某一点上会有帮助,尽管我不认为我会用它来解决这个问题。知道吗,这在某一点上会有帮助,尽管我不认为我会用它来解决这个问题