gpt4 book ai didi

java - ThreadException - 事件大部分时间发生在 UI 线程上,但有时发生在另一个线程上

转载 作者:太空宇宙 更新时间:2023-11-04 14:06:58 25 4
gpt4 key购买 nike

我有一个方法,可以从网络获取Object,然后使用此数据更新UI

我使用第三方API来获取数据并接收数据。下载过程在新的 Thread 中完成,获取和更新数据在 UI Thread 中完成。

在我的主线程中:

public void getNetRequest (DownloaderRequest netRequest) {
carImage.setBackgroundResource(netRequest.imageResource);
}

85% 的情况下,此代码在 UI 线程上运行,但有时在 15% 的情况下,我会遇到异常:

    [DownloaderForRequests]android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6024)

.
.
.
at java.lang.Thread.run(Thread.java:841)

当我调试它时,我看到 getNetRequest主线程 中调用,但异常表明它是在 DownloaderForRequests Thread 上调用的。我添加了一个日志来检查当前线程,它表明发生此异常时它确实不是主线程。

为什么这种情况很少发生?我如何测试它并 100% 修复它?我不想使用 runOnUiThread 因为它不会解决问题,我想检测它并理解问题,而不是无缘无故地添加更多代码。

最佳答案

您可以检查哪个线程,例如

if (Looper.getMainLooper().getThread() != Thread.currentThread()) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
method();
}
});
}else{
method();
}

关于java - ThreadException - 事件大部分时间发生在 UI 线程上,但有时发生在另一个线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766286/

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