Android定时器问题:自动触发的定时器,如何保证定时器在后台一直跑时不会自动的再次触发?

描述问题:Android开发定时器问题,APP进入某界面自动触发的定时器10秒打印一次输出,如何保证定时器在后台一直跑的情况下,下次进入某界面时不会自动的再次触发?

遇到情况:定时器因为是自动的触发,所以说只要到了某界面就会自动的触发一次,导致随着自动触发的次数的增多就开启了很多个定时器,打印输出就没有任何规律可言了。

当前代码:下面的代码自动触发开启定时器之后,只要APP在运行状态,不清除app后台的运行就会一直跑,因为进入APP某界面自动触发,所以会触发很多个定时器,最后定时器的定时输出就没有什么规律可言了。

​
            // 初始化定时器--10秒钟打印一次输出
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    //这里写的是逻辑,用输出语句代替 10秒打印一次
                    System.out.println("定时器正在运行...");
                }
            }, 0, 10 * 1000); //delay: 从定时器初始化成功 开始启动的延迟时间。period:定时器的间隔时间

​

希望各位大神在上面的代码的基础上,可以帮帮我想一个解决的办法,定时器这个东西把我绕的有些晕了!希望附上一个详细的代码,再次感谢各位大佬,感激不尽!

你写在活动的时候,每次进入活动都会创建一个新的定时器。如果只要一个定时器,你应该考虑把定时器写在server上,或者在Application里面写一个静态对象。写一个调用的时候的初始化方法,并且在APP被干掉的时候中止定时器。

public class App extends Application {

    //APP是否被干掉
    public static boolean isDestory=false;

    //定时器是否已经创建
    public static boolean isHave=false;


public static void initTimer(){
        if (!isHave){
            isHave=true;
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    if (isDestory){
                        //APP被干掉,结束定时器
                        isHave=false;
                        cancel();
                    }else {
                        Log.e("TAG", "run: ");
                    }


                }
            },200,1000*10);
        }
    }

    @Override
    public void onTerminate() {
        isDestory=false;
        super.onTerminate();
    }

}

 

用server,后台启动一个进程做上述操作;

在页面销毁时,移除掉定时任务

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