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

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

我的问题是主UI上的正常代码和runOnIUThread代码之间有什么区别。

实施例:1

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

例如:2

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

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

Solutions Collecting From Web of "android runOnUiThread和java中的简单代码之间的区别"

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

什么是线程?

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

第一个runOnUiThread ..

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

什么是UIThread

  • 主程序执行的线程
  • 大部分的应用程序代码将在这里运行onCreateonPauseonDestroyonClick

    所以简单地说,导致UI被更新或改变的任何事情都会在UI线程上发生

当你明确地产生一个新的线程在后台工作,这个代码不会在UIThread.Now上运行,如果你想做一些改变UI的东西? 那么欢迎您来运行runOnUiThread

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

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

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

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

另外,Android线程'可以'有一个叫做'looper'的东西。 这个“looper”是通过一个队列来处理'任务(技术上可运行的和消息)“的。 “主要UI线程”默认已经附加了一个活套。

这意味着你创build的runnable被放到主UI线程的looper队列中。 (这就是为什么runnable不是即时运行的,但是会很快运行)

您使用runnable在UI线程上运行代码的原因是因为您在其他“后台线程”中创build了…并且想要以某种方式更新UI。 (只有UI线程可以与UI进行交互)