gpt4 book ai didi

java - 更新 Java 线程池中的 UI

转载 作者:行者123 更新时间:2023-12-01 13:40:52 24 4
gpt4 key购买 nike

我同时执行一些网络请求,并使用 Android 中的 HTTPClient 获取响应。我正在使用 threadsafeclientconnmanager 以获得线程安全连接。

为了同时执行此操作,我使用 Java ThreadPool。

private enum STATE { state1, state2, state3 };

ExecutorService executor = Executors.newFixedThreadPool(nThreads);

并提交 3 个可运行文件:

executor.submit(new Processor(state1));
executor.submit(new Processor(state2));
executor.submit(new Processor(state3));

这个 Processor 类扩展了 runnable:

class Processor implements Runnable {

private STATE state;

public Processor(STATE state) {
this.state = state;
}

@Override
public void run() {
switch (state) {
case state1:
// Do something
// Call Back to update UI
break;
case state2:
// Do something
// Call Back to update UI
break;
case state3:
// Do something
// Call Back to update UI
break;
}
latch.countDown();
}
}

正如您在 run 方法中看到的,对于每个状态,我都会执行一些指令,然后需要使用回调方法更新 UI

由于这是 UI 线程,所以每个回调方法都应该是:

runOnUiThread(new Runnable() {
@Override
public void run() {
//Update UI
}
});

当我们在Android中使用Java线程池时,是否有更好的解决方案来更新UI?

最佳答案

您应该在其他线程中执行网络连接,而不是在主 UI 线程中。当您有新数据时,将其从网络线程发送到主线程。

您可以使用AsyncTask或Handler。

http://developer.android.com/reference/android/os/AsyncTask.html

https://developer.android.com/training/multiple-threads/communicate-ui.html

Asynctask 有“updatePublish”来将数据发送到 UI 线程。Handler 是一个消息系统,用于向 UI Thread 发送数据,反之亦然

我认为 Handler 是您更好的选择。

关于java - 更新 Java 线程池中的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20797737/

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