程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了嵌套postDelayed / Runnable / Handler Android大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决嵌套postDelayed / Runnable / Handler Android?

开发过程中遇到嵌套postDelayed / Runnable / Handler Android的问题如何解决?下面主要结合日常开发的经验,给出你关于嵌套postDelayed / Runnable / Handler Android的解决方法建议,希望对你解决嵌套postDelayed / Runnable / Handler Android有所启发或帮助;

这段代码运行了几次之后的最终结果是,每个Handler帖子的实例过多Runnable。如上所述:

  1. 首次on_delayed帖子1可运行
  2. 该runnable触发,然后发布2个Runnable(一个在off_delayed中,另一个在从run()返回之前)。
  3. 这将继续增加,因为当这两个Runnable触发时,将创建4个,依此类推。

您还没有利用aRunnable可以多次发布到同一队列的事实,不必每次都创建一个新队列。如果要取消操作,这是必不可少的,因为remove方法会Handler查找所有匹配的实例以从队列中删除。您可以尝试这样的方法:

private long EnabledAfter  = 300000; // 5 minutes
private long DisabledAfter = 30000;  // 30 seconds

private Runnable Enabler = new Runnable() {
    public voID run() {                                                     
        something.enable(context);                          
        something.enable_else(context, truE);

        Handler.postDelayed(disabler, DisabledAfter);
    }
};

private Runnable disabler = new Runnable() {
    public voID run() {
        something.disable(context);                                 
        something.disable_else(context, falsE);

        Handler.postDelayed(Enabler, EnabledAfter);              
    }
};

public voID start_timers(){
    Handler.postDelayed(Enabler, EnabledAfter);
}//end method

public voID stop_timers(){
   Handler.removeCallBACks(Enabler);
   Handler.removeCallBACks(disabler);
}//end method

我还添加了另一种方法,可以通过Runnable从队列中删除项目的所有实例来取消计时器操作。

高温超导

解决方法

我正在尝试使用嵌套的postDelayed,因为我需要在5分钟后(延迟5分钟)执行某项操作,在30秒后(延迟)停止该操作,然后再执行其他操作,然后从头开始在循环中再次重复这两个事件。我似乎无法正确解决。

我有沙发的代码:

private long EnabledAfter  = 300000; // 5 minutes
private long DisabledAfter = 30000;  // 30 seconds

public void start_timers(){
    on_delayed(EnabledAfter);
}//end method

private void on_delayed(long period_off){       
    Delayed = new Runnable() {
        public void run() {                                                     
            something.enable(context);                          
            something.enable_else(context,truE);       
            off_delayed(DisabledAfter); // and disable both again delayed

            Handler.postDelayed(Delayed,EnabledAfter);
        }
    };
    Handler.postDelayed(Delayed,EnabledAfter);
}//end method

private void off_delayed(long period_on){       
    Delayed = new Runnable() {
        public void run() {
            something.disable(context);                                 
            something.disable_else(context,falsE); 
            on_delayed(period_on); // start the proces again from the start...

            //Handler.postDelayed(Delayed,DisabledAfter);              
        }
    };
    Handler.postDelayed(Delayed,period_on);
}//end method

这样做的问题是,在第一次运行时运行良好,但随后似乎彼此叠加&Hellip;并且所有延迟都令人厌烦。我需要Runnable在5分钟30秒内同时执行两者,然后重复该过程。

大佬总结

以上是大佬教程为你收集整理的嵌套postDelayed / Runnable / Handler Android全部内容,希望文章能够帮你解决嵌套postDelayed / Runnable / Handler Android所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:/