问题标签 [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 投票
1 回答
1967 浏览

android - 视图组未绘制其子项

我有一个从 sdcard 获取位图的活动。它的视图设置为自定义视图组。我已将包含位图的视图动态添加到视图组,并使用处理程序更新 UI 线程中的视图组,但无济于事。视图组不显示位图。我没有自己编写的视图组代码,但应该允许用户滑动屏幕以加载不同的视图/位图。

我检查了位图是否不为空,并将日志语句放在两个文件的不同位置。关于为什么视图组的孩子没有被绘制的任何想法?

活动

视图组

输出:

0 投票
3 回答
1108 浏览

java - Android:x秒后多次更新gridview

我在每 x 秒更新一次 android 中的视图时遇到问题。

为了了解 android 的工作原理,我正在编写一个小游戏。它有一个保存游戏循环的 GameController。在循环内部,逻辑被执行,之后 gui 将被告知更改。

问题是在视图中看不到更改。视图保持不变,直到游戏循环完成并且只更新一次。

这是我的代码(重要部分):

游戏控制器.java:

游戏活动.java:

文本适配器.java:

我用谷歌搜索了很多,也尝试了很多(我确实知道这里已经问过类似的问题,但他们也没有帮助我),但不知何故它不起作用。我无法让视图和逻辑在 android 的不同线程上运行,如果它们在同一个线程上运行,逻辑会阻塞视图。任何帮助将不胜感激。

// 编辑:

如果我尝试 new Thread(c).start(); LogCat sais:java.lang.RuntimeException:无法在未调用 Looper.prepare() 的线程内创建处理程序

如果我添加 Looper.prepare(); : java.lang.RuntimeException: 无法启动活动 ComponentInfo{GameActivity}: java.lang.RuntimeException: 每个线程只能创建一个 Looper

如果我尝试 this.runOnUiThread(c); 没有错误。

0 投票
5 回答
930 浏览

android - android应用程序的主线程在哪里?

我编写了一个游戏(我将其命名为“Gamer”),其中我具有以下一般结构(代码已大大简化):

游戏一切正常,非常强大。现在我想测试某个条件,如果是真的,就设置一个 AlertDialog。我假设我可以将这段代码放在我的 onDraw 方法中。然后我收到一条消息“无法在未调用 Looper.prepare() 的线程内创建处理程序”——这让我感到困惑,因为我认为 onDraw 方法正在由我认为不需要的主线程执行设置任何东西。

我想我可以通过将我的测试和对话框移动到主线程中的某个地方(在哪里?)或在某个地方添加一些 Looper.prepare() 代码来解决这个问题。

请有人告诉我哪个更容易 - 任何必要的代码应该放在哪里。

0 投票
1 回答
3912 浏览

c# - 从流程中捕获输出流并在简单窗口中显示

我有点难过。我以前曾与后台工作人员合作过,并且在我的应用程序中的许多位置都有他们。为了显示正在发生的事情的“进度”,但使用措辞而不是仅仅“完成百分比”,我创建了一个简单的“窗口”。在这个窗口中,我有一个简单的标签。由于后台工作线程与 UI 线程的问题,我无法直接访问,所以我在 Window 上有一个“setter”,它只做

因此,当通过 BGW“ReportsProgress”并将任何消息传递给窗口的“NewStatus”设置器时(因此它在正确的 UI 线程上运行)。这一切都很完美,没有问题……只要后台工作人员在 C#.Net 应用程序中做某事。

接下来...我需要运行带有一些命令参数的 DOS 命令,但不想看到丑陋的黑色窗口。因此,从其他线程中,我发现并完美地完成了该部分。没问题。因此,此时,两个元素之间的所有语法和功能(后台工作人员刷新状态的窗口)和(调用 DOS 命令以运行某些参数化实用程序)。

现在,问题。尝试在运行 DOS 命令时刷新窗口状态。因此,这让我接触到“OutputDataReceived”来一次重定向输出和捕获行(这是完美的)。

然后在 DOSOutputHandler 中,我有

这只是挂起并且永远不会在 UI 线程上执行对窗口的更新。所以,我认为......尝试将 DOS 命令包装到 BGW 线程中......所以,我这样做......几乎所有相同的,所以,从我正在捕获其输出流的 DOS 命令,BGW 线程得到它. 然后我尝试将该字符串值转发到 Window 状态,但它似乎挂起......几乎就像 UI 线程一样,调用一个 BGW 线程,它正在调用一个进程(它自己的新线程)不想玩的不错。

有任何想法吗?

0 投票
0 回答
317 浏览

java - java - 如何在Java中的非UI线程中使用OleFrame?

请您指教如何使用

在非 UI 线程中?如果在非 UI 线程中完成,则创建一个“OleFrame”。我确实知道 UI 和非 UI 线程之间的区别。我想要实现的是org.eclipse.swt.ole.win32.OleAutomation在`IRunnableWithProgress

添加

mShell在构造函数中给出)在每个 OLE 调用之后有一点帮助,但还不够......

任何帮助将不胜感激。

.

0 投票
6 回答
15786 浏览

android - 如何在 Android UI 线程异步中执行一些代码?

我是 Android 开发的新手。我已经在 Swing 和 SWT 上工作了好几年了。Swing 和 SWT 都有在 UI 线程同步和异步中执行代码的策略。典型的用法是在一个线程中做一些耗时的人员,然后在 UI 线程异步中显示结果。

所以我的问题是,Android 中是否有类似的策略?这是我的代码。参数runnable是一些耗时的代码。此方法将在执行期间显示一个等待对话框,然后期望在完成后显示一个 Toast。但是 Toast 需要在 UI 线程中显示。那么该怎么做呢?

还有关于Android UI系统的一些话吗?比如它是不是线程安全的,线程如何协同工作等等。非常感谢!

0 投票
1 回答
578 浏览

c# - 当我在某个线程中时,我如何让 UI 线程执行命令

当我在某个线程中时,我如何让 UIthread 执行命令下面的代码被一个线程调用但是我想在 UIthread 中运行的行..如果我这样调用它就不起作用..
表格有点滞后并且进程风扇变得很快,就像它在无限循环中一样......然后它给了我一个错误“stackoverflowexception”

我的应用程序是一个文件管理器..(复制,剪切,粘贴,新文件夹..etc)..和dirRecursive(字符串路径) ..向我显示listView中的文件和文件夹及其图标,所以每次我做类似的事情(新文件夹或粘贴)我必须调用dirRecursive来更新 listView

笔记:

  • 在我尝试使用线程 执行PasteFromCopy之前,它工作得很好。
  • 当我从粘贴方法中删除dirRecursive(..)行时它工作得很好.. 但是我需要在粘贴完成后自动更新listview .. 这就是为什么我必须从PasteFromCopy调用它但使用 UIThread
  • 如果我使用 UIThread 来粘贴,那么当文件被复制时表单会滞后.. 你知道

    请帮助:)提前谢谢

  • 0 投票
    3 回答
    597 浏览

    c#-4.0 - Passing a `Disposable` object safely to the UI thread with TPL

    We recently adopted the TPL as the toolkit for running some heavy background tasks.

    These tasks typically produce a single object that implements IDisposable. This is because it has some OS handles internally.

    What I want to happen is that the object produced by the background thread will be properly disposed at all times, also when the handover coincides with application shutdown.

    After some thinking, I wrote this:

    The background Task calls RunOnUiThread to pass its result to the UI thread. The task t is scheduled on the UI thread, and takes ownership of the data passed in. I was expecting that if t could not be executed because the ui thread's message pump was shut down, the continuation would run, and I could see that that the task had failed, and dispose the object myself. DisposeObject() is a helper that checks if the object is actually IDisposable, and non-null, prior to disposing it.

    Sadly, it does not work. If I close the application after the background task t is created, the continuation is not executed.

    I solved this problem before. At that time I was using the Threadpool and the WPF Dispatcher to post messages on the UI thread. It wasn't very pretty, but in the end it worked. I was hoping that the TPL was better at this scenario. It would even be better if I could somehow teach the TPL that it should Dispose all leftover AsyncState objects if they implement IDisposable.

    So, the code is mainly to illustrate the problem. I want to learn about any solution that allows me to safely handover Disposable objects to the UI thread from background Tasks, and preferably one with as little code as possible.

    0 投票
    2 回答
    7881 浏览

    android - 异步任务在 doinbackground 中休眠,锁定 UI 线程

    编辑:已解决。对不起,伙计们,我突然想到,虽然我的数据加载是在后台线程中发生的,但解析数据的回调却没有。数据的解析花费了很长时间,这就是锁定我的线程的原因。

    编辑:我注意到我的首要问题(ProgressDialog 不再旋转)可能是由我使用 ProgressDialog 的问题引起的,而不是 UI 线程被阻塞。如果是这种情况,我该如何解决?

    编辑:澄清一下,这不会永远锁定整个程序。加载完所有内容后,将关闭进度对话框,并启动新活动。我的问题是,当它正在加载时,整个 UI 被锁定(即进度对话框停止旋转)

    TL;DR:doInBackground() 中的 Thread.sleep() 正在锁定 UI 线程

    我有一个应用程序,当一个特定的活动打开时,它开始从我的后端在后台加载大量数据,例如,与计划相关的大量数据。该信息不会立即使用,但可以在用户尝试访问它时使用(即通过单击计划按钮并启动计划活动)。

    如果用户在单击计划按钮之前稍等片刻,所有数据都会加载,计划活动将打开,并显示一切都很好。我的问题是如果他们在数据加载之前单击按钮。

    我的解决方案是创建一个显示 ProgressDialog 的 ASyncTask,同时定期检查数据是否已完成加载,否则休眠。它通过一些应用程序范围的布尔变量知道数据已完成加载。我的问题是,即使 Thread.sleep() 在 doinbackground() 中运行,它仍然会锁定 UI 线程。

    我正在使用自定义 ASyncTask,定义如下:

    并通过(例如)调用它:

    (我将全局变量的访问缩短为“loadingSchedule”以使其更易于阅读)

    如何使它不锁定 UI 线程?

    0 投票
    2 回答
    3465 浏览

    android - Android 应用程序:UIThread 阻塞 5 秒后会收到“应用程序无响应”吗?

    Android 开发者网站上曾说过:我们不应该在工作中使用长操作UIThread。相反,我们应该在另一个线程上进行。在这个网站上,他们仍然说:

    如果 UI 线程被阻塞超过几秒(目前大约 5 秒),用户会看到臭名昭著的“应用程序无响应”(ANR)对话框。

    为了检验这个说法,我做了一个证明。这是我的代码:

    如您所见,我让当前线程 ( UIThread) 休眠 8 秒。所以,我想,如果我运行这个应用程序,Android 会注意到:“应用程序没有响应”。但是,我没有看到任何错误。程序运行顺利(我也看到文本“结束等待”)。

    那么,谁能为我解释一下我的代码。请问我做错了什么。

    谢谢 :)