【问题标题】:How to stop the Runnable of Timer gracefully in Android?如何在Android中优雅地停止Timer的Runnable?
【发布时间】:2020-04-22 14:52:20
【问题描述】:

我创建了一个 runnable 线程来通过主页中的自动循环更改/滑动 View Pager 位置。

在我的应用程序中,我想在单击注销按钮时停止此线程。

我尝试了 removecallback 方法,但应用程序有时仍会崩溃。

还有其他解决方案吗?

以下是我的代码:

final Handler offers1Handler = new Handler();

Runnable offers1Runnable;

private void setLooping() {

    offers1Runnable = () -> scrollPager(binding.contentHome.offers1ViewPager);
    Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                offers1Handler.postDelayed(offers1Runnable, 1000);

            }
       },500, 3000);

   }

}


private void onLogout(){
    offers1Handler.removeCallbacks(offers1Runnable);
}

【问题讨论】:

  • 分享您的代码和 logcat 消息以找出您的错误。
  • 您不需要将timer 变量设置为类成员吗?然后在 onLogout 中调用cancel
  • @selbie 我将计时器变量更改为类成员。并取消了注销方法中的计时器。但是报告说,错误是由于寻呼机适配器有问题。

标签: android runnable android-handler


【解决方案1】:

如果你想自己取消定时器,可以使用cancel方法。

Runnable 不是线程,它只是有一个方法 run。 Timer 是一种线程工具,用于调度任务以供将来在后台线程中执行。如果你想取消,你实际上是想取消Timer。如文档所述:

如果调用者想要快速终止定时器的任务执行线程,调用者应该调用定时器的取消方法。

如果您调用cancel 方法。它的执行线程优雅地终止,并且不能在其上安排更多任务。

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 2021-06-04
    • 1970-01-01
    • 2010-12-15
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2011-03-12
    相关资源
    最近更新 更多