【问题标题】:Is it possible to update the UI from different thread besides the Main Thread in Android?除了 Android 中的主线程之外,是否可以从不同的线程更新 UI?
【发布时间】:2015-02-16 17:12:36
【问题描述】:

我在想办法解决这个问题时遇到了一些困难。我有一个 Activity,但 UI 太慢而无法渲染整个屏幕,因为它在主线程上运行。我有两个主要部分要渲染,并且想使用单独的线程来渲染这两个部分之一。我的问题是:

  • 是否可以从单独的线程更新活动中的 UI?如果有怎么办?
  • 是否可以通过在 C++ 和不同线程上完成的代码更新 UI?

提前致谢。

【问题讨论】:

  • “UI 太慢而无法渲染整个屏幕,因为它在主线程上运行”——您要渲染什么?这是常规的View 层次结构吗?这是在 OpenGL 中实现的吗?
  • 我正在渲染一个包含多个图像的网格。我正在使用 Java 进行正常活动。

标签: android multithreading user-interface java-native-interface


【解决方案1】:

UI 太慢而无法渲染整个屏幕,因为它在主线程上运行

使用 Traceview 和StrictMode 确定您的问题真正出在哪里。例如,由于您正在“使用多个图像渲染网格”,除非图像已经在内存中,否则图像的加载应该在后台线程上完成。有无数的图书馆,如 PicassoUniversal Image Loader,提供这个。

是否可以从单独的线程更新活动中的 UI?

一般来说,不会。通常这不是问题 - 尝试在主应用程序线程上加载模型数据(例如图像)时会出现问题。

是否可以从用 C++ 和不同线程完成的代码更新 UI?

一般来说,不,对于您所描述的以View 为中心的 UI。我假设 OpenGL 可以使用多个线程进行渲染,但 OpenGL 不是我的领域。

【讨论】:

  • @IndieDG:然后使用 Traceview 确定您将时间花在哪里。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2018-12-08
  • 2021-06-08
相关资源
最近更新 更多