gpt4 book ai didi

Java (Android) 线程 - 每隔一段时间重复任务,并访问值

转载 作者:行者123 更新时间:2023-11-29 08:18:44 24 4
gpt4 key购买 nike

我在 Android 上编程,但我想这是一个一般的 Java 101 问题...

我希望 myMethod() 在不阻塞 UI 的情况下每 X 毫秒运行一次 - 应该可以启动和停止该线程。 X 毫秒的值将在运行时发生变化。 myMethod() 需要对由 UI 操作的数组进行读取访问。

我该怎么做?随着时间间隔的变化,我无法使用 schedule();那么这是 sleep(int X) 的有效案例吗?如果我确实在新类中启动了一个新线程(可运行或扩展线程),我如何读取 UI 类的数组? (是否存在类似 parent.getarray() 的东西?)。解决这个问题的最佳方法是什么?

最佳答案

ScheduledThreadPoolExecutor 类为您提供调度功能。 It has some advantages over java.util.Timer

我不懂安卓,不过好像ScheduledThreadPoolExecutor is available on Android

使用 STPE 很简单:您创建您的 RunnableCallable 实例,然后通过 schedule 方法将其与调度信息一起传递给您的执行程序(多久调用一次,什么是开始延迟)。

要从您的 UI 线程访问数组,您需要使用某种同步。查看 AtomicReferenceArray、AtomicLongArray 或 AtomicIntegerArray 是否可以帮助您(它们使您无需任何其他同步即可原子访问数组元素,尽管您最好将数组变量设为最终变量)。另一种选择是将对数组的所有读取和写入放入 synchronized block 中。另一种可能性是使用 CopyOnWriteArrayList。如果您还需要从后台任务更新 UI,则需要将更新代码包装到另一个 Runnable 中并将其传递给 UI 线程。最佳选择实际上取决于您在做什么。

关于Java (Android) 线程 - 每隔一段时间重复任务,并访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258525/

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