Home和Back按钮按下:效果不是立竿见影的

时间:2013-08-23 13:12:19

标签: hardware homescreen

我在Android应用程序的不同点引入了Thread.sleep。目标是给我足够的时间在代码中的这些确切位置按HomeBack

当我在睡眠指令中按下其中一个按钮时,不立即执行按钮操作,并且在某些情况下,执行客户端应用程序的附加指令。也就是说,线程正在休眠,我按Home,客户端应用程序仍然处理几行代码(在休眠之后),然后返回主屏幕。

为什么会这样?

为了更清楚地了解问题,请考虑以下代码块:

instruction 1;
instruction 2;
instruction 3;
Thread.sleep(8000);
instruction 4;
instruction 5;
instruction 6;
instruction 7;
...
instruction N;
在睡眠时按下

HomeBack,但在实际终止之前,应用程序仍可执行几条指令,例如最多6或7条。

[edit]我想补充一点,该应用程序包含几个AsyncTasks,并且我在其内部和外部都引入了睡眠。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是,您在主线程上运行Thread.sleep()。这是你不想用Android或Java(或任何其他语言)来做的事情。

在Android中,主线程仅应用于手动设置UI元素。在以下情况下,Android会自动将代码放在主线程上:

  1. 应用程序正在启动(onCreate(...)方法)
  2. 该应用程序收到了一个事件回调(onTouch(...)onKey(...)
  3. 您创建了一个新活动(新活动的onCreate(...)
  4. 您应该在以下情况下手动将代码块放在主线程上:

    1. 您正在修改用户界面
    2. 您正在手动执行事件回调(调用onClickListener.onClick(...)
    3. 还有更多情况,但这些情况最常见。你需要做的是:

      Runnable run = new Runnable()
      {
          try
          {
              Thread.sleep(...); // <- your code goes here
      
          }catch(Exception e) {e.printStackTrace();} // just in case of interruption
      }
      
      Thread thread = new Thread(run);
      thread.start();
      

      这样,当用户想要从应用程序中退出时,主线程不会忙。你也应该避免在主线程上进行长时间的复杂操作,因为它可能会导致你的应用程序因为对UI的调整而变得“滞后”。

      另请参阅:Activity | Android Developers: runOnUiThread

      ^^这是您可以用来更改UI元素的方法。