android runOnUiThread和java中的简单代码之间的区别

时间:2017-01-13 10:37:39

标签: android multithreading android-runonuithread

我是Android应用程序开发的初学者。我正在使用android中的线程。我读过关于在主用户界面上运行代码的runOnUiThread(如果我没错?我想。)。

我的问题是主用户界面上的普通代码与runOnIUThread内的代码有什么区别。

示例1

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

示例:2

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

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

3 个答案:

答案 0 :(得分:13)

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

什么是帖子?

线程定义正在运行的进程

首先 runOnUiThread ..

  

UI线程上运行指定的操作。 如果当前线程是   UI线程,然后立即执行操作。如果是当前的   线程 UI线程,该操作被发布到事件队列   UI线程。

什么是 UIThread

  • 应用程序的主要执行线程
  • 您的大多数应用代码都会在helloworldworld"helloonCreate等处运行。

    所以简单导致UI更新或更改的任何内容都会在UI线程上发生

当您显式生成新线程以在后台中工作时,此代码不会在UIThread上运行。如果您想要执行某些更改,该怎么办?用户界面? 然后欢迎您onPause

如果要从非UI线程更新UI,则必须使用onDestroy。例如 - 如果要从后台线程更新UI。你也可以使用onClick来做同样的事情。

答案 1 :(得分:2)

通常,您的代码在UI线程上执行。对于更长时间的任务(例如网络请求等),您将使用后台任务(Handler,AsyncTask,Thread,...)。

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

答案 2 :(得分:1)

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

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

这意味着您创建的runnable被放到主UI线程的looper队列中。 (这就是为什么runnable不会立即运行,但会很快'/'很快'''

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