android – 用于调度固定速率任务的处理程序或计时器

android – 用于调度固定速率任务的处理程序或计时器,第1张

概述我正在开发一个应用程序,它要求它每隔x分钟上线并检查一些新数据.为防止繁重的网络和数据使用,任务应以固定速率运行,但这种解决方案的最佳使用方法是什么?处理程序或计时器对象? 使用Timer有一些缺点 >它只创建单个线程来执行任务和任务 运行时间太长,其他任务受损. >它不处理由任务抛出的异常,并且线程只是终止,这会影响 其他计划任务,它们永远不会运行. 而另一方面,ScheduledThreadP 我正在开发一个应用程序,它要求它每隔x分钟上线并检查一些新数据.为防止繁重的网络和数据使用,任务应以固定速率运行,但这种解决方案的最佳使用方法是什么?处理程序或计时器对象?解决方法 使用Timer有一些缺点

>它只创建单个线程来执行任务和任务
运行时间太长,其他任务受损.
>它不处理由任务抛出的异常,并且线程只是终止,这会影响
其他计划任务,它们永远不会运行.

而另一方面,ScheduledThreadPoolExecutor正确处理所有这些问题,并且使用Timer没有意义..有两种方法可以在你的情况下使用

> scheduleAtFixedrate(…)
> scheduleWithFixedDelay(..)

class LongRunningTask implements Runnable {  @OverrIDe  public voID run() {    System.out.println("Hello world");  } }ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);long period = 100; // the period between successive executionsexec.scheduleAtFixedrate(new LongRunningTask (),duration,TimeUnit.MICROSECONDS);long delay = 100; //the delay between the termination of one execution and the commencement of the nextexec.scheduleWithFixedDelay(new MyTask(),TimeUnit.MICROSECONDS);

并取消执行者使用此 – ScheduledFuture

// schedule long running task in 2 minutes:ScheduledFuture scheduleFuture = exec.scheduleAtFixedrate(new MyTask(),TimeUnit.MICROSECONDS);... ...// At some point in the future,if you want to cancel scheduled task:scheduleFuture.cancel(true);
总结

以上是内存溢出为你收集整理的android – 用于调度固定速率任务的处理程序或计时器全部内容,希望文章能够帮你解决android – 用于调度固定速率任务的处理程序或计时器所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1141064.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存