【问题标题】:after onPause() method stop "active" handler在 onPause() 方法停止“活动”处理程序之后
【发布时间】:2021-11-19 20:19:42
【问题描述】:

调用方法 handler.removeMessagesAndCallbacks(null) 会停止所有尚未执行的处理程序(延迟后)。但我需要一种方法,我找不到哪个中断已经运行的处理程序。

线程可以在执行时被中断。处理程序也可以像线程一样被中断吗?

这里是一个例子:

Handler handler = new Handler();

handler.postDelayed(new Runnable() {
> ...
}, 0);

handler.postDelayed(new Runnable() {
> ...
}, 1000);

@Override
protected void onPause() {
> super.onPause();
> handler.removeMessagesAndCallbacks(null);
}

1000 的延迟后处理程序被取消,但另一个处理程序在调用 onPause() 时仍在执行,此时已经运行。

我可以取消已经执行的处理程序吗?有比重写 Runnable 或 Handler 类更简单的机会吗?如果没有,有人可以告诉我如何覆盖,只是为了取消处理程序中的可运行对象?

在我的例子中,处理程序正在执行延迟后的动画。我不能以编程方式取消每一个动画。可运行(处理程序)应该被取消,包括动画也应该被取消。谢谢!

【问题讨论】:

    标签: java android handler onpause


    【解决方案1】:

    我认为你想要的一个好的做法是使用 kotlin 协程。 通过使用协程,您可以定义一些可以在主线程或后台线程中执行的作业。但它们的好处是您可以随时使用job.cancel() 取消它们。

    如果你想用 runnable 和 java 来做这件事,也许这个问题可以帮助你: Android: How do I stop Runnable?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2016-10-26
      • 2013-10-07
      • 2019-01-11
      相关资源
      最近更新 更多