Android handler.postDelayed vs ScheduledThreadPoolExecutor.scheduleWithFixedDelay

Android handler.postDelayed vs ScheduledThreadPoolExecutor.scheduleWithFixedDelay,android,multithreading,handler,scheduledexecutorservice,Android,Multithreading,Handler,Scheduledexecutorservice,我应该如何在新建ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay或处理程序.postDelayed()之间进行选择 它们是一样的吗?它们之间有什么区别 Future scheduledFuture = scheduledExecutor.scheduleWithFixedDelay(runnable, 0, delay, TimeUnit.MILLISECONDS); 是一种非常通用的线程管理解决方案。您可以使用一定数量的工作线程对其

我应该如何在
新建ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay
处理程序.postDelayed()之间进行选择

它们是一样的吗?它们之间有什么区别

Future scheduledFuture = scheduledExecutor.scheduleWithFixedDelay(runnable, 0, delay, TimeUnit.MILLISECONDS);

是一种非常通用的线程管理解决方案。您可以使用一定数量的工作线程对其进行初始化,然后为其提供工作单元。您可以延迟/计时并重复工作单元

是用于在线程之间通信的类。处理程序在已传递其循环器的线程上运行。如果您的处理程序在主线程中实例化,那么它将在主线程上运行;如果您使用Looper(HandlerThread)创建一个工作线程,并将其Looper传递给处理程序,那么它将在该工作线程上运行

基本上,他们两人都会在延迟后执行任务,但请注意 该
scheduledExecutor.scheduleWithFixedDelay
将始终在中执行 工作线程作为
处理程序。postDelayed
将在线程上运行 连接到的位置(主线程或后台线程)

是一种非常通用的线程管理解决方案。您可以使用一定数量的工作线程对其进行初始化,然后为其提供工作单元。您可以延迟/计时并重复工作单元

是用于在线程之间通信的类。处理程序在已传递其循环器的线程上运行。如果您的处理程序在主线程中实例化,那么它将在主线程上运行;如果您使用Looper(HandlerThread)创建一个工作线程,并将其Looper传递给处理程序,那么它将在该工作线程上运行

基本上,他们两人都会在延迟后执行任务,但请注意 该
scheduledExecutor.scheduleWithFixedDelay
将始终在中执行 工作线程作为
处理程序。postDelayed
将在线程上运行 连接到的位置(主线程或后台线程)


处理程序
-在可选延迟后在UIThread上执行可运行任务

ScheduledThreadPoolExecutor
-使用后台线程池执行定期任务

scheduleWithFixedDelay
创建并执行一个周期性动作,该动作在给定的初始延迟后首先启用,然后在一次执行结束和下一次执行开始之间的给定延迟内启用。如果任务的任何执行遇到异常,则会抑制后续执行。否则,任务将仅通过取消或终止执行者而终止

ScheduledFuture scheduleWithFixedDelay(Runnable命令,
长时间的延迟,
久拖不决,,
时间单位(单位)
使用定时器有一些缺点

  • 它只创建一个线程来执行任务,如果一个任务运行时间过长,其他任务就会受到影响

  • 它不处理任务引发的异常,线程只是终止,这会影响其他计划任务,并且它们永远不会运行

处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它被绑定到正在创建它的线程的线程/消息队列——从那时起,它将向该消息队列传递消息和可运行文件,并在它们从消息队列中出来时执行它们


处理程序
是为

  • 将消息和可运行文件安排为将来某个时间点执行;及

  • 将要在不同于您自己的线程上执行的操作排队


  • 处理程序
    -在可选延迟后在UIThread上执行可运行任务

    ScheduledThreadPoolExecutor
    -使用后台线程池执行定期任务

    scheduleWithFixedDelay
    创建并执行一个周期性动作,该动作在给定的初始延迟后首先启用,然后在一次执行结束和下一次执行开始之间的给定延迟内启用。如果任务的任何执行遇到异常,则会抑制后续执行。否则,任务将仅通过取消或终止执行者而终止

    ScheduledFuture scheduleWithFixedDelay(Runnable命令,
    长时间的延迟,
    久拖不决,,
    时间单位(单位)
    
    使用定时器有一些缺点

    • 它只创建一个线程来执行任务,如果一个任务运行时间过长,其他任务就会受到影响

    • 它不处理任务引发的异常,线程只是终止,这会影响其他计划任务,并且它们永远不会运行

    处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联。当您创建一个新的处理程序时,它被绑定到正在创建它的线程的线程/消息队列——从那时起,它将向该消息队列传递消息和可运行文件,并在它们从消息队列中出来时执行它们


    处理程序
    是为

  • 将消息和可运行文件安排为将来某个时间点执行;及

  • 将要在不同于您自己的线程上执行的操作排队


  • @蜂胶很高兴帮你我的忙friend@propoLis很高兴帮你做我的薯条
    new Handler().postDelayed(runnable, delay);
    
    ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                            long initialDelay,
                                            long delay,
                                            TimeUnit unit)