Java 如何检查处理程序是否有活动任务?

Java 如何检查处理程序是否有活动任务?,java,android,Java,Android,如果我有一个Handler Handler=new Handler()并为它运行一个延迟的任务Handler.postDelayed(xxx,xxx),是否可以检查postDelayed()是否被调用?没有直接的API来实现这一点,但是您可以使用sendEmptyMessage函数来解决这一问题。希望这会有所帮助 handler.sendEmptyMessage(some_integer);//Do this when you add the call back. if(handler.hasM

如果我有一个
Handler Handler=new Handler()
并为它运行一个延迟的任务
Handler.postDelayed(xxx,xxx)
,是否可以检查
postDelayed()
是否被调用?

没有直接的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.
是否可以检查是否调用了postDelayed()


一个快速修复方法是,在方法中将一些
布尔值
变量赋值为true,然后执行检查。

处理程序在发布Runnable时获取“what”字段==0的消息,因此理论上可以调用
hasMessages(0)
,但是您无法检查它是否提供了挂起的可运行性—例如,在发布r0和r1时,您无法检查r0是否挂起。

处理程序。post()
只是
sendMessageDelayed()
的一种方便的包装方法,因此如果您希望检查处理程序是否具有仍在积极运行的特定挂起的可运行性,或者是否使用特定的Runnable调用了
postDelayed()
,然后尝试使用以下类:

 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);
    }
}
第1步: 首先,添加一个类变量(不是局部变量

第二步: 检查处理程序是否正在运行或未使用变量

    public MyClass{
    
    boolean isAlreadyDoing;
.
.
.
.
    
    if(!isAlreadyDoing){
        isAlreadyDoing=true;
        new Handler(Looper.myLooper()).postDelayed(() -> {
        isAlreadyDoing=false;
         //Do task here
        }, delaytTime);
      }
    }

hasMessages()在我的代码中总是返回false。这是否已确认有效?确实有效。sendEmptyMessage(1);这将在处理程序中设置一条空消息,因此当您调用if(handler.hasMessages(1))时,它将返回true。如果您使用removeMessages(1)删除了该消息,则它将返回falsehasMessages(1),但在发出sendEmptyMessage(1)后,仍然会立即为我返回false。你在应用程序中使用过此代码吗?不起作用。阅读本文的人:请使用布尔型变量来实现这一点。这是一个聪明的想法!谢谢