gpt4 book ai didi

android - Android 上的延迟事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:04 27 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序,它安排某些方法以不规则的时间间隔触发。据我所知,至少有两种方法可以做到这一点:

  1. 使用 Handler.postDelayed 在给定时间后执行 Runnable

  2. 使用 Timer 安排并在给定时间后执行 TimerTask

我正在寻找一种可以处理快速连续触发的多个事件的解决方案。哪种方法最好用?我还缺少更好的吗?

最佳答案

简答

它们在后台的工作方式不同,使用错误的会导致可怕的后果。

发送到处理程序的所有消息和可运行对象都在与创建处理程序的线程相同的线程上运行,通常是服务或 Activity 线程。

另一方面,计时器会生成一个新线程。

在我看来 Timer 是适合您的方式,但根据所提供的信息无法确定。
这一切都归结为,如果您希望一切都在一个线程或多个线程上运行,两者各有利弊。

长答案

处理程序

来自Handler documentation :

Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.

这意味着处理程序只能同时处理一个事件,所有其他消息/可运行对象需要等待另一个正在执行。
但是,如果您想操纵 UI,则处理程序是唯一的方法,因为只允许主 UI 线程这样做。

如果不注意,使用处理程序可能会导致您的应用程序卡住。
一个常见的错误是当人们在主 UI 线程上创建一个处理程序,生成一堆工作线程并使用处理程序调用繁重的方法时,这将导致主 UI 线程锁定并使可怕的“应用程序没有响应” android 中的对话框

也就是说处理程序可以很好地处理线程安全,你可以让每个线程都有一个处理程序来处理所有跨线程调用(使用消息),如果你确保只有处理程序修改一个对象,你就永远不会有线程问题.

计时器

然而,使用计时器,您会产生开销或创建线程以及增加线程的复杂性,be careful when modifying shared objects!

优点是并发性,如果多个任务需要同时运行(或间隔很短),处理程序可能无法处理它,而计时器可以。

其他选项

关于android - Android 上的延迟事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com