这段代码运行了几次之后的最终结果是,每个
Handler帖子的实例过多
Runnable。如上所述:
- 首次on_delayed帖子1可运行
- 该runnable触发,然后发布2个Runnable(一个在off_delayed中,另一个在从run()返回之前)。
- 这将继续增加,因为当这两个Runnable触发时,将创建4个,依此类推。
您还没有利用a
Runnable可以多次发布到同一队列的事实,不必每次都创建一个新队列。如果要取消 *** 作,这是必不可少的,因为remove方法会
Handler查找所有匹配的实例以从队列中删除。您可以尝试这样的方法:
private long EnabledAfter = 300000; // 5 minutesprivate long DisabledAfter = 30000; // 30 secondsprivate 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 methodpublic void stop_timers(){ Handler.removeCallbacks(Enabler); Handler.removeCallbacks(Disabler);}//end method
我还添加了另一种方法,可以通过
Runnable从队列中删除项目的所有实例来取消计时器 *** 作。
高温超导
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)