如果我有一个Handler handler = new Handler()
并为它运行一个延迟的任务handler.postDelayed(xxx, xxx)
,是否可以检查是否postDelayed()
被调用?
问问题
28125 次
5 回答
22
没有直接的 API 可以实现这一点,但您可以通过使用该sendEmptyMessage
函数来解决此问题。希望这会有所帮助。
handler.sendEmptyMessage(some_integer);//Do this when you add the call back.
if(handler.hasMessages(some_integer))
handler.removeMessages(some_integer);//Do this after removing the call back.
于 2013-04-18T08:53:45.147 回答
22
是否可以检查是否调用了 postDelayed() ?
一种快速修复,在方法中将一些boolean
变量分配给 true,然后执行检查。
于 2013-04-18T08:55:43.443 回答
16
处理程序在发布 Runnable 时获取带有“what”字段 == 0 的消息,因此理论上您可以调用hasMessages(0)
,但您无法检查它是否已给出挂起的 Runnable - 例如,在发布 r0 和 r1 时,您无法检查 r0 是否处于挂起状态或不是。
于 2013-04-18T09:52:23.940 回答
7
Handler.post()
只是一个方便的包装方法sendMessageDelayed()
,所以如果你想检查一个处理程序是否有一个特定的挂起的 Runnable 仍在运行,或者是否postDelayed()
使用特定的 Runnable 调用,然后尝试使用以下类:
public class HandlerWithID extends Handler {
public final boolean postDelayed (int runnableID, long delayMillis, Runnable r) {
Message m = Message.obtain(this, r);
m.what = runnableID;
return sendMessageDelayed(m, delayMillis);
}
public final boolean post(int runnableID, Runnable r) {
return postDelayed(runnableID, 0, r);
}
public final boolean hasActiveRunnable(int runnableID) {
return hasMessages(runnableID);
}
}
于 2018-07-13T02:01:46.447 回答
0
第 1 步: 首先,添加一个类变量 (不是局部变量)。
第 2 步: 检查处理程序是否正在运行或未使用该变量。
public MyClass{
boolean isAlreadyDoing;
.
.
.
.
if(!isAlreadyDoing){
isAlreadyDoing=true;
new Handler(Looper.myLooper()).postDelayed(() -> {
isAlreadyDoing=false;
//Do task here
}, delaytTime);
}
}
于 2021-01-11T18:17:23.983 回答