其他分享
首页 > 其他分享> > 暂停计时器而不破坏并重新创建 – Android

暂停计时器而不破坏并重新创建 – Android

作者:互联网

我有这个AsyncTask,每次执行“doInBackground”时休眠0.1秒,之前我使用CountDownTimer控制我的时间.

我的问题是:我想实现一个可以暂停而不调用.cancel()的计时器,并在开始创建另一个计时器时.

有没有办法实现这个是android?我没有找到如何以不同的方式做到这一点.你能举例吗?

我在哪里找到取消计时器的示例:

> How to stop the Timer in android?
> Android timer? How-to?
> http://www.androidhub4you.com/2013/04/countdown-demo-in-android-custom-timer.html

编辑

回答Kevin Krumwiede:这个项目是一种游戏,我必须在一个确定的时间内击中阻止,所以当玩家使用某种特殊的力量时(按下指定的按钮)我想要达到一种停止计时器的方法.

EDIT2

回答Kushal:我不知道你是否编译了这段代码,但是我不能使用task1变量.这里是代码:

   public void doIt(){
        final ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();

        final Runnable task =
        new Runnable() {

            @Override
            public void run() {
                timerAsyncTask.execute();

                if(true) {
                    exec.shutdown();    // shutdown this execution
                    //exec = Executors.newSingleThreadScheduledExecutor();
                    exec.scheduleAtFixedRate(task, 0, 100, TimeUnit.MILLISECONDS);
                }
            }
        };
        exec.scheduleAtFixedRate(task, 0, 100, TimeUnit.MILLISECONDS);
    }

这里exec = Executors.newSingleThreadScheduledExecutor();它显示了一个错误:

Error:(33, 21) error: cannot assign a value to final variable exec

一旦exec是最终变量,我认为这很好.

这里是exec.scheduleAtFixedRate(task,0,100,TimeUnit.MILLISECONDS);我有另一个错误:

Error:(34, 46) error: variable task might not have been initialized

你能解释一下,我怎么能用这段代码?我对android很新.
谢谢.

解决方法:

我建议你完全避开Android中的计时器. Android具有轻量级和更好的解决方案,称为Handler

你可以找到这两个here之间的比较.总结一下

比较处理程序VS计时器

>虽然重新安排Handler非常简单,但您无法重新安排Timer
>在Handler中,您只能附加到任何Runnable但定时器计划
一个TimerTask
> TimerTask纯粹是后台任务,因此您无法更新
UserInterface,但对于Handler的Runnables来说并非如此
>计时器导致执行
>与Handler相比,计时器倾向于泄漏更多内存,请参见图表
对象由计时器和处理程序保留.它会迅速增加
定时器,如果您正在创建和安排新任务.

如帖子所示,Handler的使用非常简单.这是一个示例代码

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;

public class TestActivity extends AppCompatActivity {


    private static int INITIAL_TIMER_DELAY = 100;
    private static int TIMER_PERIOD = 100;

    private android.os.Handler handler;
    private Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        handler = new Handler(Looper.getMainLooper());
        runnable = new Runnable() {
            @Override
            public void run() {
                // Do something and reschedule ourself
                handler.postDelayed(this, TIMER_PERIOD);
            }
        };
        handler.postDelayed(runnable, INITIAL_TIMER_DELAY);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        cancelTimer();
    }

    private void cancelTimer() {
        if (handler != null) {
            handler.removeCallbacks(runnable);
        }
    }

    private void rescheduleRunnable() {
        handler.postDelayed(runnable, INITIAL_TIMER_DELAY)
    }


}

标签:android,timer,timertask,countdowntimer,onpause
来源: https://codeday.me/bug/20190623/1274388.html