android - 在android中重用定时器

标签 android timer

在我的 android 应用程序中,我有以下相关代码:

/*Code outside*/    
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Timer t = new Timer();
        t.scheduleAtFixedRate(
            new TimerTask(){
                public void run(){
                    stuffToBeDone();
                }
            },someVariableDelay,someVariablePeriod);
    }
}

一切都很顺利,直到我注意到每次按下按钮时 stuffToBeDone() 都会运行一次。据我所知,每次 onClick() 被调用时,旧的 Timer 不应该再存在了,但不知何故 TimerTask 仍然存在。

在第二次单击按钮时,我不再引用第一个 Timer 来取消()它(因为它不应该再存在了)。如果我在 外部代码 中将 Timer 声明为 final 变量以便我可以执行此操作,取消后我将无法再重用它。那么我怎样才能终止那个 TimerTask 但仍然能够使用 Timer?

最佳答案

Android Timer 是基于 Android 开发者网站的线程:

http://developer.android.com/reference/java/util/Timer.html

When a timer is no longer needed, users should call cancel(), which releases the timer's thread and other resources. Timers not explicitly cancelled may hold resources indefinitely.

我建议仅在 onclicklistener 中实例化计时器,即类似于此的内容:

    /*Code outside*/    
Timer t = null;
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(t == null)
           t = new Timer();
        else
           t.cancel();
        t.scheduleAtFixedRate(
            new TimerTask(){
                public void run(){
                    stuffToBeDone();
                }
            },someVariableDelay,someVariablePeriod);
    }
}

关于android - 在android中重用定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929980/

相关文章:

android - 如何从操作栏中的按钮打开下拉菜单

javascript - 返回 JS 对象而不是数组的 php 脚本

java - Android 的 HSTS 或 ATS 等效项?

Android ImageReader YUV 420 888 重复数据

javascript - setInterval 计时器在移动设备上运行速度太快

ios - TableView 单元格中的倒计时器在滚动后显示不同的值

javascript - 带有 Angular 计时器的 Angular ui-bootstrap 进度条不显示值

java - 启动 Intent 查看器以显示来自 url 的图像

ios - Xcode 无法识别 Timer() - Swift 3

android - 如何在通知上显示计时器?