Android 从第二个线程访问 UI

标签 android multithreading user-interface checkbox

我的布局中有数百个 CheckBox 小部件,现在我正在尝试反转它们中的每一个,因此如果它被选中,它就不会被选中,反之亦然。显然,如此繁重的工作应该在单独的线程中完成,但问题是所有工作实际上都发生在 UI 上。部分线程代码:

for (int x = 0; x < list.getChildCount(); ++x)
{
  final WListRowTarget curRow = (WListRowTarget)list.getChildAt(x);
  curRow.post(new Runnable()
  {
    public void run()
    {
      try
      {
        curRow.getCheckBox().setChecked(!curRow.getCheckBox().isChecked());
      }
      catch (Exception e) {}
    }
  });
}

该线程实际可以做的唯一一件事就是遍历列表并为每个找到的复选框发布 Runnable。问题是所有这些 Runnable 几乎同时到达 UI 线程,因此它们都是同时执行的……应用程序的行为与我在 UI 线程中运行上述代码完全一样——一切都卡住了。一个可能的解决方案是在每个复选框后休眠几毫秒,这样 Runnable 就可以被执行,并且 UI 将有时间处理事件……但这更像是一个 hack。

我该如何解决这个问题?

提前致谢, 斯诺克

最佳答案

I have hundreds of CheckBox widgets in my layout and now I'm trying to invert each of them, so if it was checked it won't be checked and vice versa. Obviously such heavy work should be done in separate thread

不 - 这基本上是 UI 工作,坦率地说,设置一堆标志不是真正的“繁重”工作。所涉及的大部分“工作”实际上是 UI 重绘 - 显然 确实无论如何都必须在 UI 线程上完成。创建许多不同的任务以在 UI 线程上执行只是给它更多工作 - 只需在线程上一批完成所有任务,而无需尝试使用不同的线程。

另外,我不想在桌面上使用带有数百个复选框的 UI,更不用说在移动设备上了 - 您确定不应该重新设计您的 UI 吗?您可能会发现,提出一个更优雅的设计无论如何都会消除任何性能影响......

关于Android 从第二个线程访问 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096507/

相关文章:

java - 动态填充字符序列中的数据

java - 在 Android 应用程序开发中使用 python over java 可能会出现哪些性能问题?

python - 初级Python线程问题

iphone - iPhone 用户界面对象到底是如何工作的?

java - 从类方法启动 Activity 时遇到问题

java - 奇怪的 JSON 对象解析

java - 如何让两个线程同时工作

c# - Func<> 和原始代码

java - 显示轴和标签 - 条形图 java

java - 所有事件均不适用于 JavaFX 的 Eclipse