我在Android应用程序的不同点引入了Thread.sleep
。目标是给我足够的时间在代码中的这些确切位置按Home
或Back
。
当我在睡眠指令中按下其中一个按钮时,不立即执行按钮操作,并且在某些情况下,执行客户端应用程序的附加指令。也就是说,线程正在休眠,我按Home
,客户端应用程序仍然处理几行代码(在休眠之后),然后返回主屏幕。
为什么会这样?
为了更清楚地了解问题,请考虑以下代码块:
instruction 1;
instruction 2;
instruction 3;
Thread.sleep(8000);
instruction 4;
instruction 5;
instruction 6;
instruction 7;
...
instruction N;
在睡眠时按下 Home
或Back
,但在实际终止之前,应用程序仍可执行几条指令,例如最多6或7条。
[edit]我想补充一点,该应用程序包含几个AsyncTasks,并且我在其内部和外部都引入了睡眠。
答案 0 :(得分:0)
我认为您的问题是,您在主线程上运行Thread.sleep()
。这是你不想用Android或Java(或任何其他语言)来做的事情。
在Android中,主线程仅应用于手动设置UI元素。在以下情况下,Android会自动将代码放在主线程上:
onCreate(...)
方法)onTouch(...)
,onKey(...)
)onCreate(...)
)您应该在以下情况下手动将代码块放在主线程上:
onClickListener.onClick(...)
)还有更多情况,但这些情况最常见。你需要做的是:
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元素的方法。