yirj 2021-01-28 17:39 采纳率: 50%
浏览 429
已结题

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:定时器的间隔时间

​

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

  • 写回答

3条回答 默认 最新

  • qq_1113502097 2021-01-29 10:42
    关注

    你写在活动的时候,每次进入活动都会创建一个新的定时器。如果只要一个定时器,你应该考虑把定时器写在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();
        }
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月3日

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试