问题标签 [ui-thread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2391 浏览

android - 在 AsyncTask 中启动 Activity 时内存泄漏(从 Thread 更改)

我对 Android 开发还很陌生,当我注意到我有一个巨大的内存泄漏时,我正要完成我的第一个应用程序。

当我从一个线程中启动一个新活动时,就会发生泄漏:

执行此代码后应用程序的 HPROF 转储显示线程将始终保留在堆中并呈指数增长。研究这一点指向引用导致泄漏的线程内的上下文。所以我改变了这段代码几次,直到它变成这个版本,在静态类中只有一个弱引用(这是其他帖子中提到的一些东西)

我之所以要在一个线程中启动Activity,是因为我需要从一个缓慢而大的Web服务中读取数据,这需要一些时间。我在活动中显示了一个加载栏,突出显示所选项目直到XMLparser完成,然后开始一个新活动。

可能没有正确的方法在线程中启动活动而不会导致内存泄漏?而且,如果是这样,在 xml 解析器完成他的工作后,我是否有另一种方式来启动意图?


在 Vladimir 和 Heiko 的建议下,我将线程更改为 AnyncTask。我的保留堆的增长已停止,但我启动的 AsyncTask 线程仍保留在堆中。这是我的新代码:

为了澄清我的问题,这是我的 HPROF 线程概述堆转储之一的副本(很难阅读,因为由于我的用户级别,我不允许在 MAT 中发布带有链接和图像的 html ......)。AsyncTask 线程保留了 376 或 344 的堆。随着我浏览应用程序的时间越长,来自线程的保留堆将越来越多AsyncActivity……

0 投票
3 回答
520 浏览

.net - 在 Windows 窗体中使用进度条时,“冗长的过程”是否必须在非 UI 线程上运行?

当您使用进度条时,它是否在 UI 线程中运行?我问是因为我想知道如何为在 UI 线程上运行的冗长任务显示进度条。

我有一些窗口需要一段时间才能打开并完全呈现,我想向用户表明正在发生的事情。他们中的一些人不耐烦,如果用户界面在 1/4 秒内没有响应,他们就会开始疯狂地点击。

IE 冗长的过程不一定是我想在后台线程中运行的东西。那么在这种情况下如何显示进度条呢?

0 投票
3 回答
127 浏览

.net - 非 UI 线程可以显示到屏幕上吗?

只有 UI 线程能够显示到屏幕上,还是其他线程也可以这样做?

0 投票
1 回答
3177 浏览

android - admob:如何在 UI 线程之外加载 AdRequest?

我有一个游戏,里面有广告。我最终发现延迟的根源基本上是因为 adRequest 过程需要很长时间。

我试图做一些事情,比如创建一个线程,当有一个 adRequest 时它会做一些 loadAd。但导致广告不会出现。所以我认为 loadAd 请求必须在 UI Thread 中完成。有什么解决方法吗?我仍然不明白 UI Thread 是如何工作的

0 投票
3 回答
662 浏览

c# - 在阻塞的 UI 线程中处理 Windows 消息?

这可能与阻塞的 UI 线程中的 ProgressBar 更新有关,但略有不同。

在对崩溃的 WinForms 控件(DevExpress 树列表)进行故障排除时,我们团队的一名成员遇到了不寻常的情况,我想知道是否有人可以帮助我们了解发生了什么。英语不是他的母语,所以我代表他发帖。

请参阅Visual Studio 2005 的此屏幕截图

请注意以下几点:

  1. 主 UI 线程已停止,当前处于 DevExpress 控件绘制方法中。

  2. 屏幕上显示的代码来自同一调用堆栈中较早的点。此代码位于数据层中,并被调用以响应控件请求为树节点显示图像的请求。(也许也源自 Paint 处理程序)

  3. 显示的代码来自调用堆栈的早期,在主 UI 线程上,当前正在等待锁定!由于远程系统可以发送在数据模型中的后台线程上处理的事件(即,数据模型在客户端和服务器之间同步),我们锁定以保持数据收集线程安全。

  4. 正如调用堆栈所示,我们继续在 UI 线程上处理绘制消息,而我们希望线程被阻塞。

这很难复制,我无法在我自己的盒子上使用更简单的测试项目来复制。然而,当这种情况出现时,结果是 DevExpress 控件的内部状态可能会混乱,导致控件崩溃。这看起来不像是控件中的错误,因为毫无疑问,它是在假设这些绘制方法仅在 UI 线程上运行的情况下编写的。我们在此处看到的内容使 UI 线程看起来像两个线程。

看起来这可能只是调用堆栈表示中的一个 Visual Studio 错误,除了这整个努力是为了解决已发布应用程序中控件偶尔崩溃的问题(在这种情况下,它显示为一个大UI 中的红色 X),因此问题似乎并非孤立于调试环境。

好吧,这很复杂,但希望是有道理的。有任何想法吗?

0 投票
2 回答
2808 浏览

wpf - 使用 TPL 时避免窗口 (WPF) 冻结

我正在构建一个 WPF,它有一个在 sql server 中执行 sql 查询的按钮(查询可能需要很长时间才能运行)。我想使用 TPL 来做到这一点。

这段代码: var result = Task.Factory.StartNew(() => { command.ExecuteNonQuery(); });

给出了这个例外:ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为关闭。

我猜这是因为查询在不同的线程上运行并且不知道打开的连接。

我有 2 个问题: 1. 如何让新线程知道这个打开的连接?2.解决这个问题后,如何让窗口不因为这个查询而冻结。

谢谢

0 投票
1 回答
319 浏览

iphone - 取消在 iphone 的 uitableview 中加载数据

在我的应用程序中,我有很多,大约 70000 条记录要加载到表格视图中。加载需要很长时间,比如十分钟。由于它阻塞了主 UIthread,我无法返回或访问任何按钮。是否有任何替代方法,例如为此目的使用单独的线程或任何替代方法?请告诉我一些方法。

谢谢,维诺德。

0 投票
2 回答
661 浏览

ui-thread - 在 Android 中为 UI 创建一个新线程

我创建了一个活动,之后我创建了一个线程,它从电话簿中读取数据,进行一些字符串操作并根据规则在主 UI 上创建各种按钮。

我有下面的代码,但有一些应用程序如何终止。

谁能帮帮我吗。

我收到以下错误:

util.concurrent.FutureTask.run(FutureTask.java:137) 06-24 21:52:36.436: 错误/AndroidRuntime(297): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java .lang.Thread.run(Thread.java:1096) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程可以触摸它的观点。06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewRoot.checkThread(ViewRoot.java:2802) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android. view.ViewRoot.requestLayout(ViewRoot.java:594) 06-24 21:52:36.436:

0 投票
1 回答
1633 浏览

android - 这是否在 UI 线程上运行

此代码是否实际上在 android(2.2 及更高版本)的 UI 线程下运行。如果没有,有一个如何做到这一点的例子。

在活动中,我调用 JSInterface

0 投票
2 回答
904 浏览

.net - UI线程访问外部控制

我有一个Session管理对象状态的对象(类似于休眠会话)。此会话侦听来自外部源的事件,这些事件可能需要更新内部会话状态。我们已经尝试在会话中实现锁定以确保访问的数据是连贯的,但是有很多复杂的边缘情况。

相反,将这些事件编组到与使用会话(即 UI 线程)相同的线程上可能会更容易。通常这是完成的,Control.Invoke()但因为这是一个数据对象,所以无法Control访问。

这是一种合理的方法吗?如何在更新会话状态之前将这些事件放到 UI 线程上?创建会话时,我可以使用Dispatcher并捕获当前线程的调度程序吗?