【发布时间】:2020-04-01 07:08:56
【问题描述】:
我有一个带有方法 sampleMethod 的类。如何检查一个类的 Object 是否有 sampleMethod() 并且该 sampleMethod() 被调用并取消它的执行?
public class MyClass {
public checkMethodIsQueuedForExecution() {
Method m = this.getClass().getMethod("sampleMethod");
// Check if previously called, and stop it.
if (m != null) {
m.invoke(this, null); // calls sampleMethod()
}
}
public void sampleMethod() {
// do something
}
}
我发现我可以使用反射检查类的对象是否有方法,但是如何检查该方法是否排队等待执行?如果是,则取消它的执行。
【问题讨论】:
-
听起来像XY Problem。为什么要这样做?
-
这类似于objective-C有cancelPreviousPerformRequestsWithTarget,performSelector。我正在尝试为 Android 应用程序的 Java 找到相同的机制。
-
我没有使用 Objective-C 的经验,但是查看这些方法的文档表明您正在以错误的方式进行操作。调用方法是立即的。反射在这里帮不了你。无论您使用什么 API,都应该提供一种取消异步请求的方法。也许如果你提供了一个 minimal reproducible example 来展示你所追求的以及你遇到的问题,那么某人可能会提供更多帮助。
-
Re, "//检查之前是否调用过,并停止它。"为什么不直接写
sampleMethod()让它只工作一次呢?
标签: java android multithreading handler runnable