Jac*_*ace 5 android handler thread-sleep
我的代码中有一个thread.sleep和一个处理程序postDelayed:
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.e(TAG, "I ran");
mIsDisconnect = false;
}
}, DISCONNECT_DELAY);
Run Code Online (Sandbox Code Playgroud)
处理程序代码之后和用户按下按钮之后我有:
while (mIsDisconnect) {
try {
Thread.sleep(DELAY);
} catch (InterruptedException e) {
Log.e(TAG, "problem sleeping");
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户等待足够长时间,我可以在我的日志中获得"我跑".但是如果用户在延迟结束之前按下按钮,则似乎postDelayed永远不会有机会执行.我的问题是,thread.sleep()是否与处理程序postDelayed混乱?
编辑:此代码的目的是我想在DISCONNECT_DELAY秒已经过去之后才继续该程序.因此,如果用户提前点击,我必须等待经过的时间才能完成.
laa*_*lto 12
我假设您handler与运行其他循环的同一个线程相关联.(A Handler与创建它的线程相关联.)
postDelayed()将Runnable处理程序线程的消息队列放入.当控制返回到线程时,将处理消息队列Looper.
Thread.sleep()只是阻止线程.控件不会返回到,Looper并且无法处理消息.在UI线程中睡觉几乎总是错误的.
要完成您要执行的操作,请删除睡眠,然后使用postDelayed()发布Runnable更改您的应用状态(就像您已经通过设置成员变量一样mIsDisconnect).然后在onClick()刚刚检查应用程序状态(mIsDisconnect标志)是否可以继续.
| 归档时间: |
|
| 查看次数: |
14971 次 |
| 最近记录: |