gpt4 book ai didi

android - Timer 是否在后台线程上运行?与 timer.schedule() 的执行不一致

转载 作者:行者123 更新时间:2023-11-29 17:54:58 27 4
gpt4 key购买 nike

我一直在开发一款通过 UDP 发送传感器数据的应用程序。我已经实现了一个带有 AsyncTask 的 UDP 客户端,并创建了一个定时器来以固定的时间间隔执行这个 AsyncTask(发送 UDP 数据包)。

但是,我注意到输出 udp 数据包时有间歇性滞后,这表明计划的执行有时会被推迟。我注意到,如果我使用 UI(上下滑动通知栏/弹出通知),计划的执行将被暂停。

这让我想知道 Timer 是否确实在后台线程上运行?开发人员文档似乎表明确实如此,但它似乎因 UI 事件而受阻。

我的代码在下面,也许我的实现有问题?我的应用程序目前正在监听传感器数据,并通过 udp 在 X 方向上输出加速度。我在一个简单的 python 服务器上接收数据包。

//代码省略

最佳答案

问题:
我认为延迟是由您的应用程序主线程(UI 线程)上完成的工作量造成的。

您在 onCreate() 中注册所有监听器,这会将它们置于主线程中。由于您以 SENSOR_DELAY_NORMAL 的频率注册更新,因此您的监听器试图每约 200 毫秒处理 3 个新的传感器事件。当您使用 UI 时,延迟会更加明显,因为 UI 监听器也在主线程上注册。

解决方案:
解决此问题的一种方法是在单独的线程上收听传感器更新。尝试使用 HandlerThread ;使用它的循环程序在单独的线程上创建一个处理程序,然后您可以在注册监听器时使用它。 This是如何使用它的一个很好的例子!

关于android - Timer 是否在后台线程上运行?与 timer.schedule() 的执行不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060640/

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