11

我是 android 应用程序开发的初学者。我正在使用 android 中的线程。我已经阅读了有关runOnUiThread在主 UI 上运行代码的信息(如果我没记错的话?我猜。)。

我的问题是主 UI 上的普通代码和里面的代码有什么区别runOnIUThread

示例:1

class A
{
getDataFromServer(foo);//Code on mainUI
}

示例:2

getActivity.runOnUiThread(new Runnable(){
@Override
public void run(){
getDataFromServer(foo);
}
});

这两个例子有什么区别。请帮助我。你的回答对我来说将是一个新的学习。

4

3 回答 3

14

假设您的意思是 UIThread 代码的简单代码,

什么是线程?

一个线程定义了一个正在运行的进程

首先运行OnUiThread ..

在UI 线程上运行指定的操作。如果当前线程是 UI 线程,则立即执行动作。如果当前线程不是UI 线程,则将动作发布到 UI 线程的事件队列中。

什么是UIThread

  • 应用程序的执行主线程
  • 您的大部分应用程序代码将在此处运行onCreate, onPause, onDestroy,onClick等。

    因此,任何导致 UI 更新或更改的事情都必须在 UI 线程上发生

当您显式生成一个新线程以在后台执行工作时,此代码不会在 UIThread 上运行。现在,如果您想做一些改变 UI 的事情怎么办?那么欢迎你runOnUiThread

runOnUiThread()当你想从非 UI 线程更新你的 UI 时,你必须使用它。例如,如果您想从后台线程更新您的 UI。你也可以Handler用于同样的事情。

于 2017-01-13T10:53:05.443 回答
2

通常,您的代码在您的 UI 线程上执行。对于耗时较长的任务(例如网络请求等),您将使用后台任务(处理程序、AsyncTask、线程...)。

由于只能从 UI 线程中访问您的视图因此runOnUiThread()如果您在后台线程中执行代码并且需要从该后台线程更新您的视图,则可以使用该视图。

于 2017-01-13T10:41:28.987 回答
1

要解释“为什么”Android 具有“runOnUiThread()”选项,重要的是要了解 java 仅用于创建 Android 使用的字节码 (dex)。手机上运行的代码不是java。

此外,Android 线程“可以”有一个叫做“looper”的东西。这个“looper”是通过队列按顺序处理“任务(技术上可运行的和消息)”的。默认情况下,“主 ui 线程”已经附加了一个活套。

这意味着您创建的可运行文件已放入主 UI 线程的 looper 队列中。(这就是为什么 runnable 不会立即运行,而是会“快速”/“很快”运行)

您使用 runnable 在 UI 线程上运行代码的原因是因为您处于您创建的其他一些“后台线程”中......并且希望以某种方式更新 UI。(只有 UI 线程可以与 UI 交互)

于 2017-01-13T10:47:17.710 回答