2013-03-12 66 views
1

我有一个Android应用程序和两个活动。在这两项活动的子项中,我在run()函数中运行了一个无限的for循环。打开后退按钮上的循环

我想活动返回到先前的视图上在以下两种情况:

  1. 当前日历第二达到HIGH_SEC(59)
  2. 用户点击返回按钮

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

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循环中。有谁知道如何检查返回按钮,以便我可以让我的代码作出适当的反应?

+2

的一种方式。你需要赶回按钮按下事件,并将布尔值设置为true。在for循环中,检查boolean是否为真,然后中断循环,否则执行代码。 – 2013-03-12 07:51:01

+0

我还没有获得工作解决方案。也许在本周末。否则,稍后。 – austin 2013-03-18 19:21:15

+0

好的!如果您有任何问题,请发回! – span 2013-03-19 09:00:56

回答

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 
} 
+0

谢谢你在某些时候会有所帮助,虽然我不认为我会用它来解决这个问题 – austin 2013-03-12 08:02:32

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; 
} 
+0

我会尝试你的方法以及Mudasser Hassan的跟踪布尔值的想法。 onBackPressed将触发将打破while循环的布尔值。谢谢! – austin 2013-03-12 08:00:18

+0

没有probs,祝你好运!我的“while(true)”语句是为了表明可以使用布尔值,应该使它更清晰:) – span 2013-03-12 08:22:56

+1

请参阅http://stackoverflow.com/questions/8868167/android-volatile-not-working必须使用标志为volatile volatile private volatile boolean backFlag; – tgkprog 2013-03-12 08:52:47